折半查找(二分查找)-C++版

折半查找(二分查找)
必须先排序,不然不能使用二分查找
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;
//}

猜你喜欢

转载自blog.csdn.net/weixin_45488131/article/details/106846619