首页 > 其他 > 详细

顺序查找 && 折半查找

时间:2014-04-23 14:19:23      阅读:436      评论:0      收藏:0      [点我收藏+]

顺序查找                                                            

算法描述

顺序比较即可。

平均查找长度

(n+1)/2, 其中n为表长。

时间复杂度

O(n)

bubuko.com,布布扣
#include "stdio.h"
typedef struct student{
    int id;                /*学生编号*/
    char name[10];        /*学生姓名*/
    float score;            /*成绩*/ 
}Student;

int search(Student stu[],int n,int key){
    int i;
    for(i=0; i<n; i++)
        if( stu[i].id == key )            /*查找成功*/
            return i;               
    return -1;                         /*查找失败*/
 
}
void main()
{
    Student stu[4] = {{1004,"TOM",100} ,    
                      {1002,"LILY",95},
                      {1001,"ANN",93},
                      {1003,"LUCY",98}
                      };                        /*初始化结构体数组*/
    int addr;                                /*要查找的记录的地址*/
    addr = search(stu,4,1003);
    printf("Student ID:   %d\n",stu[addr].id);         /*输出查找到的记录的信息*/
    printf("Student name: %s\n",stu[addr].name);
    printf("Student score: %f\n",stu[addr].score);
}
bubuko.com,布布扣

折半查找                                                            

算法描述

限制:待查表必须是有序的向量(在内存中连续存储)

首先和数组中点比较,如果等于则返回,如果小于中点则在左边区间查找,如果大于中点则在右边区间查找。

平均查找长度

lg(n+1)

bubuko.com,布布扣
#include "stdio.h"
bin_search(int A[],int n,int key){
    int low,high,mid;
    low = 0;
    high = n-1;//因为从0开始,所以减1
    while(low<=high)
    {
        mid = (low + high)/2;//从中间开始找,先找出中间的数为多少
        if(A[mid]==key)return mid;                /*查找成功,返回mid*/
        if(A[mid]<key){
            low = mid + 1;                    /*在后半序列中查找*/
        }
        if(A[mid]>key){
            high = mid - 1;                    /*在前半序列中查找*/
        }
    }
    return -1;                                /*查找失败,返回-1*/
}
main()
{
    int A[10] = {2,3,5,7,8,10,12,15,19,21},i,n ,addr;
    printf("The contents of the Array A[10] are\n");
    for(i=0;i<10;i++)
    printf("%d ",A[i]);                            /*显示数组A中的内容*/
    printf("\nPlease input a interger for search\n");
    scanf("%d",&n);                            /*输入待查找的元素*/
    addr = bin_search(A,10,n);                    /*折半查找,返回该元素在数组中的下标*/
if(-1 != addr)                            /*查找成功*/
printf("%d is at the %dth unit is array A\n ",n,addr);
    else printf("There is no %d in array A\n",n);        /*查找失败*/
}
bubuko.com,布布扣

 

 

 

转载请注明出处:http://www.cnblogs.com/yydcdut/p/3681774.html

顺序查找 && 折半查找,布布扣,bubuko.com

顺序查找 && 折半查找

原文:http://www.cnblogs.com/yydcdut/p/3681774.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!