C语言折半查找法(超详细)

C语言折半查找法(超详细)折半查找法仅适用于对已有顺序的数组 数据进行操作 从小到大 自我总结 折半查找法就是相当于 通过改变 low 或 high 的大小 把中间位置指到了 key 那个数那里 所以 mid 应该处于循环里面 即 mid high low 2 注意 low mid high 都要与下标绑定 也就是说它们就是下标 且循环条件是 high gt low 同时注意 若原来数组是由小到大排列的则 mid high low 2 if key

折半查找法仅适用于对已有顺序的数组、数据进行操作!!!(从小到大)自我总结:折半查找法就是相当于(通过改变low或high的大小)把中间位置指到了key那个数那里,所以mid应该处于循环里面,即mid=high+low/2。注意:lowmidhigh都要与下标绑定,也就是说它们就是下标。且循环条件是:high>=low.

同时注意:若原来数组是由小到大排列的则:

      mid=(high+low)/2;

            if(key
说明要找的值在左边

            high=mid-1;

            else if(key>a[mid])//说明要找的值在mid右边

            low=mid+1;//最小值的位置往右进一位

若原来数组是由大到小排列的则:

mid=(high+low)/2;

            if(key>a[mid])//注意是由大到小排列 ,所以此时keyamid 左边,故high=mid-1

            high=mid-1;

            else if(key
注意是由大到小排列,所以此时keyamid】右边,故low=mid+1

            low=mid+1;

当然在下面这个代码中,也可以用选择排序法和冒泡法来对任意数组进行排序,然后在应用此函数,保证折半查找法的前提是排好序了。

#include 
  
    void zb(int key,int a[],int n)//key表示要找的数,a表示数组,n表示数组元素个数 { int i,high,low,mid; int count1=0,count=0; low=0; high=n-1; while(high>=low)//保证右下标不小于左下标 { count++; mid=(high+low)/2;//总的来说变得是中间位置相当于把中间位置移到了key那个数那里,所以mid应该处于循环里面 if(key 
   
     a[mid])//说明key在a【mid】的右半边 ,那么最左边的low下标就可以在下标mid基础上往右进一个单位了 low=mid+1; if(key==a[mid]) { printf("元素找到了!!!\n一共查找了%d次\n它处于a[%d]位置上\na[%d]=%d\n",count,mid,mid,key); count1++; break; } } if(count1==0) printf("元素不存在!!!\n"); } int main () { int key,n,a[100]; int i; void zb(int key,int a[],int n);//声明定义函数 printf("请输入数组元素个数:\n"); scanf("%d",&n); printf("请输入(从小到大)所有数组元素:\n"); for(i=0;i 
     
    
  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207612.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午1:29
下一篇 2026年3月19日 下午1:29


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号