二分查詢法(折半查詢法)

2021-08-19 15:47:06 字數 1547 閱讀 2428

/*

二分查詢法

說明:如果搜尋的數列已經有排序,應該盡量利用它們已排序的特性,以減少搜尋比對的次數 ,這是搜尋的基本原則,二分搜尋法是這個基本原則的代表。

解法:在二分搜尋法中,從數列的中間開始搜尋,如果這個數小於我們所搜尋的數,由於數列已排序,則該數左邊的數一定都小於要搜尋

的物件,所以無需浪費時間在左邊的數;如果搜尋的數大於所搜尋的物件,則右邊的數無需再搜尋,直接搜尋左邊的數。

所以在二分搜尋法中,將數列不斷的分為兩個部份,每次從分割的部份中取中間數比對,例如要搜尋92於以下的數列,首先中間數

索引為(0+9)/2 = 4(索引由0 開始):

[3 24 57 57 67 68 83 90 92 95]

由於67小於92,所以轉搜尋右邊的數列:

3 24 57 57 67 [68 83 90 92 95]

由於90小於92,再搜尋右邊的數列,這次就找到所要的數了:

3 24 57 57 67 68 83 90 [92 95]

*/#include

#include

#include

#define max 10

#define swap(x,y)

void quicksort(int, int, int

);int bisearch(int, int

);int main(void

) ;

inti, find;

srand(time(null));

for(i = 0; i < max; i++)

quicksort(number,

0, max-1

); printf(

"數列:");

for(i = 0; i < max; i++)

printf(

"%d

", number[i]);

printf(

"\n輸入尋找物件:");

scanf("%d

", &find);

if((i = bisearch(number, find)) >= 0

) printf(

"找到數字於索引 %d

", i);

else

printf(

"\n找不到指定數");

printf("\n

");return0;

}int bisearch(int number, int

find)

return -1;}

void quicksort(int number, int left, int

right)

quicksort(number, left, i-1);//

對左邊進行遞迴

quicksort(number, j+1, right); //

對右邊進行遞迴

}}

執行結果:

二分查詢法 折半查詢法

二分查詢法 也稱折半查詢法,是一種效率較高的查詢方法,存在一定的侷限性。侷限性 適用於有序陣列 有序鍊錶等查詢,例如 array,list。基本原理 第一步 設定需要查詢的元素key,再設定low和high兩個臨時指標分別指向左邊第乙個元素和右邊最後乙個元素。第二步 因為資料是有序的,先根據low和...

二分查詢法(折半查詢法)

二分查詢用法 1 二分查詢要求 2 什麼時候使用二分查詢當在乙個有序list中,需要查詢乙個值,而這個值不確定在什麼位置時,使用該演算法可以通過極少的查詢次數得到結果 而使用簡單查詢,如果這個值在list的最後出現就需要查詢列表長度的次數才可以查到。也就是說,對於包含n個元素的列表,用二分查詢最多需...

折半查詢法(二分查詢法)

一.舉例 二.演算法時間複雜度 假設一共有n個元素 第一次折半元素個數變為n 2 第二次折半元素個數變為n 4 第三次折半元素個數變為n 8 第k次折半元素個數變為n 2 k 假設k次找到,即為n 2 k 1 k log2 n 三.函式實現 define crt secure no warnings...