C语言,折半查找。随机产生80 个整数构成的递增序列,使用折半查找算法查找指定的整数,并统计比较次数

算法思想
1、折半查找:在给定的一张有序表中,先确定待查记录的所在范围,然后逐步缩小范围直到找到或找不到该记录为止。

流程图
C语言,折半查找。随机产生80 个整数构成的递增序列,使用折半查找算法查找指定的整数,并统计比较次数_第1张图片

代码如下

#include
#include
#include
#define OK 1
#define FALSE 0
#define OVERFLOW -2
#define ERROR 0
typedef int ElemType;
typedef struct 
{
     
    ElemType *elem;
    int length;
}SSTable;

int Search_Bin(SSTable ST,int key,int *count)
{
     
    int low,high,mid;
    low=1;
    high=ST.length;
    while(low<=high)
    {
     
        mid=(low+high)/2;
        *count+=1;  //计数器
        if(ST.elem[mid]==key)
            return mid;
        else if(key<ST.elem[mid])
            high=mid-1;
        else 
            low=mid+1;
    }
    return 0;
}

void main()
{
     
    int count=0,key,x,i;
    SSTable ST;
    srand((unsigned)time(NULL) + (unsigned)rand());  //以time()为种子生成随机数
    ST.elem=(int*)malloc(81*sizeof(int));
    ST.elem[0]=rand()%10+1;
    ST.length=80;
    for(i=1;i<81;i++)
        ST.elem[i]=ST.elem[i-1]+rand()%10+1;
    printf("有序数如下\n");
    for(i=1;i<81;i++)
    {
     
        if(i%9)
            printf("%4d",ST.elem[i]);
        else
        {
     
            printf("%4d",ST.elem[i]);
            printf("\n");
        }
    }
    printf("\n请选择一个数用来查找!\n");
    scanf("%d",&key);
    x=Search_Bin(ST,key,&count);
    if(x)
        printf("该元素的下标是:%d\n",x);
    else
        printf("该元素不存在!\n");
    printf("比较次数是:%d",count);
}

你可能感兴趣的:(查找,数据结构,二分法)