搜索
bottom↓
回复: 2

求一个二分法算法代码

[复制链接]

出0入10汤圆

发表于 2017-7-14 08:24:08 | 显示全部楼层 |阅读模式
如题,开源的代码更好,谢谢

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出10入23汤圆

发表于 2017-7-14 08:25:19 来自手机 | 显示全部楼层
这玩意不是一大把么?

出0入10汤圆

发表于 2017-7-15 16:15:20 | 显示全部楼层

  1. typedef unsigned int UINT32;

  2. //折半查找法
  3. int BinSearch(int Buff[],UINT32 len,int num)
  4. {
  5.         UINT32 mid,first = 0,last =len - 1 ;

  6.         while(first<=last)
  7.         {
  8.                 mid = (first+last)/2;

  9.                 if(Buff[mid] == num)
  10.                 {
  11.                         return mid;
  12.                 }
  13.                 else if(Buff[mid] < num)
  14.                 {
  15.                         first = mid+1;
  16.                 }
  17.                 else
  18.                 {
  19.                         last = mid-1;                       
  20.                 }
  21.         }
  22.        
  23.         return -1;
  24. }

  25. //递归算法实现折半查找
  26. int BinSearch_2(int Buff[],int first,int last,int num)
  27. {
  28.         int mid;

  29.         if(first<=last)
  30.         {
  31.                 mid = (first+last)/2;
  32.                 if(Buff[mid] == num)
  33.                 {
  34.                         return mid;
  35.                 }
  36.                 else if(Buff[mid] < num)
  37.                 {
  38.                         first = mid +1;
  39.                         return BinSearch_2(Buff,first,last,num);
  40.                 }
  41.                 else
  42.                 {
  43.                         last = mid - 1;
  44.                         return BinSearch_2(Buff,first,last,num);
  45.                 }
  46.         }

  47.         return -1;
  48. }


  49. //递归算法实现折半查找
  50. //但这个算法如果没有找到元素,则找到
  51. //example:1 2 2 3 查找2,返回2(下标从0开始)
  52. //example:1 1 1 3 查找2,也是返回2(下标从0开始)
  53. int BinSearch_3(int Buff[],UINT32 len,int num)
  54. {
  55.         int start = 0,end = len-1,mid;

  56.         while(start<=end)
  57.         {
  58.                 mid = (start+end)/2;
  59.                 //偏右的情况
  60.                 /*if (num<Buff[mid])
  61.                 {
  62.                         end = mid-1;
  63.                 }
  64.                 else
  65.                 {
  66.                         start = mid+1;
  67.                 }*/

  68.                 if (Buff[mid]<num)
  69.                 {
  70.                   start = mid+1;
  71.                 }
  72.                 else
  73.                 {
  74.                   end = mid-1;
  75.                 }
  76.         }

  77.         return start;
  78. }
复制代码

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 02:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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