二分尋找的改進--差值尋找

來源:互聯網
上載者:User

標籤:二分尋找   差值尋找   尋找   

                             差值尋找

    在二分尋找中,我們每次比較都可以排除一半的資料量,這個已經是很高效了。如果利用關鍵字本身的資訊,每次排除的資料量充分依賴於關鍵字的大小,則尋找會更高效,這就是差值尋找的思想。

下面通過範例程式碼,比較二分尋找和差值尋找的不同,在不同中領略差值尋找的改良之處。

#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");}
運行

二分尋找


差值尋找


通過開啟注釋,分別對二分尋找和差值尋找進行測試。也可以尋找一個不存在的關鍵字,實驗發現,差值尋找的尋找次數明顯少於二分尋找。


專欄目錄

  • 資料結構與演算法
  • c指標


二分尋找的改進--差值尋找

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.