折半查找(二分查找)
必须先排序,不然不能使用二分查找
2^20 = 100万(就是1M) 约等于; 找20次
2^30 = 10亿(就是1G) 约等于; 找30次
有趣的例子:兰州拉面`
#include<iostream>
using namespace std;
//int BinarySearch(int* a, const int x,const int n); //函数声明,数据的个数是n,要找的数据是x 竖着放
int BinSearch(int* a, const int x, const int n); //横着放
int main()
{
int x[] = { 1,2,3,4,5,6,7,8,9,10 };
int 结果;
int num;
num = 7;
结果 = BinSearch(x, 7, 10);
if (结果 < 0)
cout << "没找到" << endl;
else
cout << "在x[" << 结果 << "]找到" << endl;
return 0;
}
int BinSearch(int* a, const int x, const int n)
{
int left = 0, right = n - 1;
while (left <= right)
{
int middle = (left + right) / 2;
if (x < a[middle]) right = middle - 1; //如果x小于中间的,右边的就等于中间 -1;
else if (x > a[middle]) left = middle + 1; //如果x大于中间的,左边的 就等于中间+1;
else return middle;
}
return -1;
}
//int BinarySearch(int* a, const int x, const int n) //函数定义
//{
// int low, high, mid;
// low = 0, high = n - 1; //数组的下标
// while (low <= high)
// {
// mid = (low + high) / 2;
// if (a[mid] == x)
// return mid;
// else if (a[mid] < x)
// low = mid + 1;
// else if (a[mid] > x)
// high = mid - 1;
// }
// return -1;
//}