【C++】递归之二分查找
简单查找的时间复杂度为O(n)
二分查找的时间复杂度为O(logn)
用递归实现二分查找:
基线条件:数组只包含一个元素。如果如果要查找的值与这个元素相同,就找到了;否则说明不在数组中。
递归条件:把数组分成两半,将其中一半丢弃,并对另一半执行二分查找。
C++代码实现如下(VS可以直接运行):
#include <iostream> using namespace std; //x为目标数据、left为数组第一个元素下标、right为数组最后一个元素下标 int recurBinarySearch(int* p, int x, int left, int right); int main() { int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int x = 7; int result; result = recurBinarySearch(array, x, 0, 9); if (result == -1) cout << "没找到" << endl; else cout << "在array[" << result << "]里找到" << x << endl; } int recurBinarySearch(int* p, int x, int left, int right) { //基线条件 if (left == right) return left; //递归条件 if (left < right) { int mid = (left + right) / 2; //得到中间值 if (x < p[mid]) //小于,改变right return recurBinarySearch(p, x, left, mid - 1); else if (x > p[mid]) //大于,改变left return recurBinarySearch(p, x, mid + 1, right); else return mid; //得到x } return -1; }