如果卻搜尋的資料分布平均的話,可以使用插補(interpolation)搜尋法來進行搜尋,在搜尋的物件大於500時,插補搜尋法會比 二分搜尋法 來的快速。
插補搜尋法是以資料分布的近似直線來作比例運算,以求出中間的索引並進行資料比對,如果取出的值小於要尋找的值,則提高下界,如果取出的值大於要尋找的 值,則降低下界,如此不斷的減少搜尋的範圍,所以其本原則與二分搜尋法是相同的,至於中間值的尋找是透過比例運算,如下所示,其中k是指定要尋找的物件, 而m則是可能的索引值:
("數列:");
for(i =
0; i < max; i++
)printf
("%d "
, number[i]);
printf
("\n輸入尋找物件:");
scanf
("%d"
,&find);if
((i =
intsrch
(number, find)
)>=0)
printf
("找到數字於索引 %d "
, i)
;else
printf
("\n找不到指定數");
printf
("\n");
return0;
}int
intsrch
(int number,
int find)
return mid;
return-1
;}void
quicksort
(int number,
int left,
int right)
quicksort
(number, left, i-1)
;// 對左邊進行遞迴
quicksort
(number, j+
1, right)
;// 對右邊進行遞迴
}}
插補搜尋法
有問題 插補搜尋法 說明 如果卻搜尋的資料分布平均的話,可以使用插補 interpolation 搜尋法來進行搜尋,在搜尋的物件大於500時,插補搜尋法會比 二分搜尋法 來的快速。include include include define max 10 define swap x,y void q...
C 經典演算法題 二分搜尋法(搜尋原則的代表)
如果搜尋的數列已經有排序,應該盡量利用它們已排序的特性,以減少搜尋比對的次數,這是搜尋的基本原則,二分搜尋法是這個基本原則的代表。在二分搜尋法中,從數列的中間開始搜尋,如果這個數小於我們所搜尋的數,由於數列已排序,則該數左邊的數一定都小於要搜尋的物件,所以無需浪費時間在左邊的數 如果搜尋的數大於所搜...
C 經典演算法題 快速排序法(三)
之前說過軸的選擇是快速排序法的效率關鍵之一,在這邊的快速排序法的軸選擇方式更加快了 快速排序法的效率,它是來自演演算法名書 introduction to algorithms 之中。先說明這個快速排序法的概念,它以最右邊的值s作比較的標準,將整個數列分為三個部份,乙個是小於s的部份,乙個是大於s的...