尋找表(Search table)是由同一類型的資料元素(或記錄)構成的集合。關鍵字(key)是資料元素中某個資料項目的值, 又稱為索引值,用它可以表示一個資料元素,也可以標識一個記錄的資料項目(欄位),稱之為關鍵碼。若此關鍵字可以唯一地 標識一個記錄,則稱此關鍵字為主關鍵字(primary key)。而對於那些可以識別多個資料元素(或記錄)的關鍵字,稱為次 關鍵字(Secondary Key),次關鍵字也可以理解為不以唯一標識一個資料元素(或記錄)的關鍵字,它對應的資料項目就是次 關鍵碼。
尋找(Searching)就是根據給定的某個值,在尋找表中確定一個其關鍵字等於給定值的資料元素(或記錄 )。
尋找表按照操作方式來分有兩大種:靜態尋找表和動態尋找表。
靜態尋找表(Static Search Table) : 只作尋找操作的尋找表,主要操作為:
(1)查詢某個“特定的”資料元素是否在尋找表中。
(2)檢索某個 “特定的”資料元素和各種屬性。
動態尋找表(Dynamic Search Table):在尋找過程中同時插入尋找表中不存在的 資料元素,或者從尋找表中刪除已經存在的某個資料元素。
(1)尋找時插入資料元素。
(2)尋找時刪除數 據元素。
本文先來說說靜態尋找表。
一、順序表尋找
順序尋找(Sequential Search)又叫線性尋找 ,是最基本的尋找技術,它的尋找過程是:從表中的一個(或最後一個)記錄開始,逐個進行記錄的關鍵字和給定值比較, 若某個記錄的關鍵字和給定值相等,則尋找成功,找到所查的記錄;如果直到最後一個(或第一個)記錄,其關鍵字和給定 值都比較不相等時,則表中沒有所查的記錄,尋找不成功。
二、有序表尋找
1、折半尋找
折半尋找( Binary Search)技術,又稱為二分尋找。它的前提是線性表中的記錄必須是關鍵碼有序(通常從小到大有序),線性表必須 採用順序儲存。折半尋找的基本思想是:在有序表中,取中間記錄作為比較對象,若給定值與中間記錄的關鍵字相等,則查 找成功;若給定值小於中間記錄的關鍵字,則在中間記錄的左半區繼續尋找;若給定值大於中間記錄的關鍵字,則在中間記 錄的右半區繼續尋找。不斷重複上述過程,直到尋找成功,或所有尋找地區無記錄,尋找失敗為止。
2、插值尋找
插值尋找(Interpolation Search)是根據要尋找的關鍵字key與尋找表中最大最小記錄的關鍵字比較後的尋找方法 ,其核心就在於插值的計算公式 (key-a[low])/(a[high]-a[low]) 。
3、斐波那契尋找
斐波那契尋找 (Fibonacci Search)演算法的核心在於
1)當key = a[mid] 時,尋找就成功;
2)當key < a[mid] 時,新 範圍是第low 個到第mid - 1個,此時範圍個數為F[k-1]-1個。
3)當key > a[mid] 時,新範圍是第m+1 個到第 high個,此時範圍個數為F[k-2]-1個。
如圖8-4-13所示。