//二分查找 //前提是已经排序 //比如有100万个已经排序的数据(从小到大),先找到中间的数(第50万个),比较要找的数与第50万个数 //假设比50万大,再把50W-100W折半为75W,再与75W比较……不断折半,2的20次方是100多万,因此最多20次就能找到 #include <iostream> using namespace std; int BinarySearch(int *a,int x,const int n); //函数声明,要查找数x int BinarySearch1(int *a,int x,const int n); int main() { int x[] = {1,2,3,4,5,6,7,8,9,10}; int i ; //查找位置 int num = 7; i = BinarySearch(x,7,10); if (i<0) cout << "没找到!"<<endl; else cout <<"在x["<<i<<"]位置找到"<<num<<endl<<endl; int j; int num1 = 10; j = BinarySearch1(x,10,num1); if (j<0) cout << "没找到!"<<endl; else cout <<"在x["<<j<<"]位置找到"<<num1<<endl; return 0; } int BinarySearch(int *a,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; } int BinarySearch1(int *a,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; else if(x > a[middle]) left = middle +1; else return middle; } return -1; }
二分查找
最新推荐文章于 2024-05-16 08:53:55 发布