文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言折半查找法怎么使用

2023-07-02 10:54

关注

这篇文章主要介绍了C语言折半查找法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言折半查找法怎么使用文章都会有所收获,下面我们一起来看看吧。

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

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

      mid=(high+low)/2;            if(key<a[mid])//说明要找的值在左边            high=mid-1;            else if(key>a[mid])//说明要找的值在mid右边            low=mid+1;//最小值的位置往右进一位

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

mid=(high+low)/2;            if(key>a[mid])//注意是由大到小排列 ,所以此时key在a【mid】 左边,故high=mid-1 ;            high=mid-1;            else if(key<a[mid])//注意是由大到小排列,所以此时key在a【mid】右边,故low=mid+1;            low=mid+1;

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

#include<stdio.h> 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】的左半边 ,那么最右边的high下标就可以在下标mid基础上往左进一个单位了        high=mid-1;         else 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<n;i++)     {         scanf("%d",&a[i]);     }     printf("请输入要查找的数:\n");     scanf("%d",&key);     zb(key,a,n);     printf("\n");     return 0; }

关于“C语言折半查找法怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C语言折半查找法怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯