資料結構與演算法 二分查詢的C 實現

2021-10-24 19:38:14 字數 1495 閱讀 5637

任務:分別用遞迴和迴圈兩種方式實現二分查詢演算法(在某有序陣列中查詢特定的數字並返回其在陣列中的下標)

**如下:

#include #define num 20

using namespace std;

void print(int* a, int len); // 顯示當前陣列

void binarysearch_recursion(int* a, int left,int right,int value); // 二分查詢(遞迴實現)

void binarysearch_loop(int* a, int left, int right, int value); // 二分查詢(迴圈實現)

int main()

cout << "陣列a: ";

print(a, num);

binarysearch_recursion(a, 0, num, 55);

binarysearch_loop(a, 0, num, 31);

while (1);

return 0;

}// 顯示當前陣列

void print(int* a, int len)

cout << endl;

}// 二分查詢(遞迴實現)

// a:被查詢陣列 left,right:二分查詢的下標範圍 value:查詢的數值

void binarysearch_recursion(int* a, int left, int right, int value)

// 當left==right時,直接比較當前下標是否符合要求

if (left == right)

else

}//遞迴:取下標範圍中間處的值,若等於value,則輸出結果,否則更改下標範圍繼續遞迴

int mid = (left + right) / 2;

if (a[mid] == value)

if (a[mid] > value)

else }

// 二分查詢(迴圈實現)

// a:被查詢陣列 left,right:二分查詢的下標範圍 value:查詢的數值

void binarysearch_loop(int* a, int left, int right, int value)

// 當left==right時,直接比較當前下標是否符合要求

if (left == right)

else

}//迴圈:取下標範圍中間處的值,若等於value,則跳出迴圈輸出結果,否則更改下標範圍繼續迴圈

int mid = (left + right) / 2;

while (a[mid] != value && left!=right)

else

mid = (left + right) / 2;

} if (a[mid] == value)

else

}

資料結構與演算法 二分查詢

二分查詢的思想是在已經排序 公升序 的陣列中,如果要查詢的數比中位數小,那麼其位置只可能在左半部分,相反只能在右半部分。這樣每次把查詢區間縮小一半,比順序查詢效率快得多。非遞迴寫法 public static int binarysearchinasclooply int nums,int star...

資料結構與演算法,二分查詢

1.時間複雜度 每次能去掉一半即 logn 2.實現方式 while迴圈 與 遞迴 我更推薦 while 迴圈,因為遞迴有個潛在的問題就是 stack over flow 堆疊溢位 而且在實際工程中是盡量避免遞迴的。雖然遞迴寫起來方便,也不容易出錯。3.實現關鍵點 我總結了下,一共有以下四點 sta...

資料結構與演算法 二分查詢

基礎概念 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且要用陣列作為表的儲存結構。不妨設有序表是遞增有序的。通俗理解 每次首先找到陣列的中間位置 middle 然後把待查詢數 target 與middle進行比較。如果查詢數target ...