1 /* 2 折半查找 = 二分查找 3 2的n次数 = m ,那么在m个数据中,查找1个数据,只需要n次 4 5 效率非常高,对于海量数据非常高效 6 7 前提是: 该数组已经排序过了 8 */ 9 10 11 12 #include "BinarySearch.h" 13 #include <iostream> 14 using namespace std; 15 int BinarySearch(int *a,int nLen,int nNumberic); 16 17 int main() 18 { 19 const int nLen = 10; 20 int list[nLen] = {1,2,3,4,5,6,7,8,9,10}; 21 int nNeedNumberic = 11; 22 23 int nRet = BinarySearch(list,nLen,nNeedNumberic); 24 if (-1 == nRet) 25 { 26 cout <<"二分查找:没找到"<<endl; 27 } 28 else 29 { 30 cout <<"二分查找:找到了!"<<endl; 31 } 32 33 system("pause"); 34 return 0; 35 } 36 37 38 //二分查找代码逻辑 39 int BinarySearch(int *a,int nLen,int nNumberic)//前提是: 该数组已经排序过了 40 { 41 /* 42 *a是数组 43 nLen是数组长度 44 nNumberic是要查找的数据 45 46 return的是下标 47 */ 48 49 int low = 0; //起始下标 50 int high = nLen -1; //最后1个下标 51 int mid; //中间下标 52 53 while (low <= high)//当low > high的时候,循环结束,就表示在数组里没有找到nNumberic 54 { 55 56 mid = (low + high) / 2;//整数+整数相除可能有小数,但是默认规则是舍去小数位,依然可以得到小于high的整数索引 57 58 if (a[mid] == nNumberic) 59 { 60 return mid;//找到了nNumberic,返回下标 61 } 62 else if (a[mid] < nNumberic)//nNumberic在下半部分 63 { 64 low = mid + 1;//重新设置查找范围的起始地址 65 } 66 else if (a[mid] > nNumberic) 67 { 68 high = mid - 1;//重新设置查找返回的结束地址 69 } 70 71 //这里的 mid + 1 和 mid - 1 只是重新设置查找范围 72 } 73 74 //如果没有该nNumberic 就返回-1 75 return -1; 76 77 }