鱼C论坛

 找回密码
 立即注册
查看: 501|回复: 0

[学习笔记] 折半查找法思想

[复制链接]
最佳答案
21 
发表于 2018-1-11 16:57:38 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 qq1242009750 于 2018-1-11 18:00 编辑

折半查找法思想


操作判断说明.png

例子:
无标题.png

代码如下:
  1. //折半查找法
  2. int bin_Search(int *Arr, int num)
  3. {
  4.         int low = 0, mid, hig = MAX - 1;

  5.         while (low <= hig)                        //如果low大于hig时就是溢出了,也就可以判断要查找的数不在数组内
  6.         {
  7.                 mid = (hig + low) / 2;
  8.                 if (Arr[mid] < num)
  9.                 {
  10.                         low = mid + 1;
  11.                 }
  12.                 else if(Arr[mid] > num)
  13.                 {
  14.                         hig = mid - 1;
  15.                 }
  16.                
  17.                 if (Arr[mid] == num)
  18.                 {
  19.                         return mid;
  20.                 }
  21.         }
  22.        
  23.         return -1;   //查找失败!
  24. }
复制代码


递归版本:
  1. int CSearch::recursion(int *Arr, int low, int mid, int hig, int num)
  2. {
  3.         if (low > hig)        //判断是否出错
  4.         {
  5.                 return -1;
  6.         }
  7.        
  8.         if (Arr[mid] == num)        //判断是否找到
  9.         {
  10.                 return mid;
  11.         }

  12.         return Arr[mid] > num ? recursion(Arr, low, (low + mid - 1) / 2, mid - 1, num) : recursion(Arr, mid + 1, (mid + 1 + hig) / 2, hig, num);  //判断mid的值是否大于查找值或小于(用于传递不同的参数)
  13. }
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
不二如是 + 5 + 5 很细心的笔记

查看全部评分

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号 )

GMT+8, 2018-7-16 14:46

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表