1. 程式人生 > 實用技巧 >【C++】遞迴之二分查詢

【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; }