[日常練習] 8. 基於有序陣列指定元素的二分查詢C語言實現
阿新 • • 發佈:2018-12-20
問題描述:
採用折半(二分)查詢的方式,在整型有序陣列中查詢想要的數字,找到了返回下標,找不到返回-1。
問題分析及原始碼:
有序陣列它的關鍵就是陣列下標最小值及最大值,二分查詢就是針對有序陣列最為簡單的一種查詢方式。關鍵注意迴圈的建立及跳出條件,當左側left都以經大於右側right時,宣告查詢完畢!原始碼及結果如下:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int my_search(int arr[], int key, int left, int right) //引數為陣列、查詢元素、陣列下標最小值、陣列下標最大值 { while (left <= right) { //當left已經超過right時,及陣列元素已經被找到了 int mid = (right + left) / 2; if (key < arr[mid]) { //判定所查詢元素是否在左半邊 right = mid - 1; //若是,則縮小分割槽範圍 } else if (key > arr[mid]) { //判定所查詢元素是否在右半邊 left = mid + 1; //若是,則縮小分割槽範圍 } else { return mid; } } return -1; } int main() { int key = 6; int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int ret = my_search(arr, key, 0, 9); if (ret == -1) { printf("沒找到\n"); } else { printf("%d\n", ret); } system("pause"); return 0; } { printf("%d\n", ret); } system("pause"); return 0; }
結果滿足預期,成功!注意這種折中查詢的演算法應用、思想,尤其是迴圈的條件及左右參值的改變情況即要求!