標籤:二分尋找 差值尋找 尋找
差值尋找
在二分尋找中,我們每次比較都可以排除一半的資料量,這個已經是很高效了。如果利用關鍵字本身的資訊,每次排除的資料量充分依賴於關鍵字的大小,則尋找會更高效,這就是差值尋找的思想。
下面通過範例程式碼,比較二分尋找和差值尋找的不同,在不同中領略差值尋找的改良之處。
#include <stdio.h>#include <stdlib.h>int InterSearch(int *array, int n, int key){if (array && n > 0){int low, high, mid;low = 0, high = n - 1;while (low <= high){mid = (low + high) / 2; //二分尋找//mid = low + (high - low)*(key - array[low]) / (array[high] - array[low]); //差值尋找static int i = 1;printf("尋找第 %d 次\n", i++);if (key < array[mid])high = mid - 1;else if (key > array[mid])low = mid + 1;elsereturn mid;}return -1;}return -1;}void main(){int array[] = { 1, 3, 5, 6, 7, 8, 9, 11, 13 };int key = 11;int sub = InterSearch(array, sizeof(array) / sizeof(int), key);if (sub != -1)printf("尋找到的下標是 %d , key = %d \n", sub, key);elseprintf("尋找失敗!\n");system("pause");}運行
二分尋找
差值尋找
通過開啟注釋,分別對二分尋找和差值尋找進行測試。也可以尋找一個不存在的關鍵字,實驗發現,差值尋找的尋找次數明顯少於二分尋找。
專欄目錄
二分尋找的改進--差值尋找