美文网首页
数据结构实验——折半查找

数据结构实验——折半查找

作者: 秣禾 | 来源:发表于2020-06-02 12:13 被阅读0次

    前子表查找:high=mid-1;
    后子表查找:low=mid+1;
    算法分析:
    1.确定查找有序序列a,置查找区间初值,low为1,high为表长n。
    2.当low小于等于high时,循环执行以下操作:
    (1)mid取值为high和low的中间值;
    (2)将查找值num与中间位置的关键字a[mid]进行比较,若相等则查找成功,输出查找值num在序列a中的位置mid;
    (3)若查找值num小于中间位置a[mid],则进入前一子表中查找,high=mid-1;
    (4)若查找值num大于中间位置a[mid],则进入后一子表中查找,low=mid+1;
    3.循环结束,说明查找空间为空,则查找失败。
    程序如下:

    #include <stdio.h>
    void main()
    {
    int a[20],num,low,high,mid,i,flag=0;
    int n;
    printf("请输入有序序列中的元素个数:");
    scanf("%d",&n);
    printf("请输入%d个有序元素:",n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("请输入要查找的数值:");
    scanf("%d",&num);
    low=1;
    high=n;
    while(low<=high)
    {
        mid=(low+high)/2;
        printf("low=%d,mid=%d,high=%d\n",low,mid,high);
        if(a[mid]>num)
    {
        high=mid-1;//将在前子表中查找
    }
    if(a[mid]<num)
    {
        low=mid+1;//将在后子表中查找
    }
    if(a[mid]==num)
    {
        flag=1;
        break;
    }
    }
    if(flag)
    {
    
        printf("found!\n");
        printf("%d是此序列中的第%d个元素\n",num,mid+1);
        }
        else
        {
            printf("not found!\n");
        }
    
    }
    
    折半查找.png

    相关文章

      网友评论

          本文标题:数据结构实验——折半查找

          本文链接:https://www.haomeiwen.com/subject/zlcuzhtx.html