求一个二分法算法代码

2019-12-27 18:40发布

如题,开源的代码更好,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
zouzhichao
1楼-- · 2019-12-28 00:00
 精彩回答 2  元偷偷看……
10xjzheng
2楼-- · 2019-12-28 05:00

  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. }
复制代码

一周热门 更多>