C#數據結構—查找
一:查找
1.1 基本概念和術語
查找(Search)是在數據結構中確定是否存在關鍵碼等於給定關鍵碼的記錄的過程。關鍵碼有主關鍵碼和次關鍵碼。主關鍵碼能夠唯一區分各個不同的記錄,次關鍵碼通常不能唯一區分各個不同的記錄。以主關鍵碼進行的查找是最經常、也是最主要的查找。
查找有靜態查找(Static Search)和動態查找(dynamic Search)兩種。靜態查找是指只在數據結構裏查找是否存在關鍵碼等於給定關鍵碼的記錄而不改變數據結構,動態查找是指在查找過程中插入數據結構中不存在的記錄,或者從數據結構中刪除已存在的記錄。
衡量查找算法的最主要的標準是平均查找長度(Average Search Length,簡稱
其中,pi是要查找記錄的出現概率,ci是查找相應記錄需進行的關鍵碼比較次數。
1.2 靜態查找表
由於靜態查找不需要在靜態查找表中插入或刪除記錄,所以,靜態查找表的數據結構是線性結構,可以是順序存儲的靜態查找表或鏈式存儲的靜態查找表。下面采用順序表作為順序存儲的靜態查找表,單鏈表作為鏈式存儲的靜態查找表。
1.2.1 順序查找
順序查找(Sequnce Search)又稱線性查找(Linear Search),其基本思想是:從靜
順序查找的基本操作是關鍵碼的比較,因此,查找表的長度就是查找算法的時間復雜度,即為 O(n)。
順序查找雖然簡單,但效率很低,特別是當查找表中的記錄很多時更是如此。
1.2.2 有序表的折半查找
折半查找(Binary Search)又叫二分查找,其基本思想是:在有序表中,取中間的記錄作為比較對象,如果要查找記錄的關鍵碼等於中間記錄的關鍵碼 ,則查找成功;若要查找記錄的關鍵碼小於中間記錄的關鍵碼,則在中間記錄的左半區
區繼續查找。不斷重復上述查找過程,直到查找成功,或有序表中沒有所要查找 的記錄,查找失敗。
C#數據結構—查找