二分查找

xiaoxiao2021-02-28  97

二分查找思想:二分查找可以解决预排序数组的查找问题。只要数组中包含T(即要查找的值),那么通过不断的缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组,将数组的中间项与T进行比较,可以排除一般的元素,范围缩小一半。就这样反复比较反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找过程大约要经过Log(2)N次比较。        注意:二分查找是针对有序的数组而言的。 #include<iostream> using namespace std; int binary_search(int arr[], int n, int key) { int left = 0; //数组的首位置,即arr[0]处 int right = n - 1;//数组的最后一个位置,即arr[n-1],数组大小为n //循环条件一定要注意 while (left <= right) { int mid =(left+right)/2; //放在while循环内部,否则mid无法正确更新;如果此处用移位代替除以2可以提高效率,而且可以防止溢出(int mid =left + ((right - left) >> 1);)。 if (arr[mid] > key)//数组中间的位置得数大于要查找的数,那么我们就在中间数的左区间找 { right = mid - 1; } else if (arr[mid] < key)//数组中间的位置得数小于要查找的数,那么我们就在中间数的右区间找 { left = mid + 1; } else { return mid;//中间数刚好是要查找的数字。 } } //执行流如果走到此处说明没有找到要查找的数字。 return -1; } int main() { int arr[5] = { 1, 3, 5, 9, 10 }; int ret1 = 0,ret2 = 0,ret3 = 0; ret1 = binary_search(arr, 5, 9); cout << ret1 << endl; ret2 = binary_search(arr, 5, 5); cout << ret2 << endl; ret3 = binary_search(arr, 5, 2); cout << ret3 << endl; }
转载请注明原文地址: https://www.6miu.com/read-33541.html

最新回复(0)