資料尋找是基礎的電腦編程工作,而且人們對它的研究已經很多年了。有兩種對列表內資料進行尋找的方法:順序尋找和二叉尋找。當資料項目在列表內隨機排列的時候可以使用順序尋找,而當資料項目在列表內有序排列的時候則會用到二叉尋找。
1.順序尋找演算法。最突出的尋找類型就是從屬記錄集的開始處順次遍曆每條記錄,直到找到所要的記錄或者是到達資料集的末尾。這就是所謂的順序尋找。順序尋找(也被稱為線性尋找)是非常容易實現的。從數組的起始處開始,把每個訪問到的數組元素依次和所要尋找的數值進行比較。如果找到匹配的資料項目,就結束尋找操作。如果遍曆到數組的末尾仍沒有產生匹配,那麼就說明此數值不在數組內。下面是一個執行順序尋找操作的函數
bool SeqSearch(int[] arr, int sValue){ for (int index = 0; index < arr.Length ; index++) //小bug if (arr[index] == sValue) return true; return false;}
如果發現匹配,那麼函數會立刻返回True 並且退出。如果到達數組的末尾,函數還沒有返回True,那麼要尋找的數值就不在數組內,而函數則會返回False。
2.二叉尋找演算法。當要尋找的記錄從頭到尾都是有序排列的時候,為找到數值可以執行一種比順序尋找更加有效尋找。這種尋找被稱為是二叉尋找。為了理解二叉尋找的工作原理,請假設你正試圖猜測由朋友選定的一個在1 至100 之間的數字。對於每次你所做的猜測,朋友都會告訴你是猜對了,還是猜大了,或是猜小了。最好的策略是第一次猜50。如果猜大了,那麼就應該再猜25。如果猜50 猜小了,則應該再猜75。在每次猜測的時候,你都應該根據調整的數的較小或較大範圍(這依賴於你猜測的數是偏大還是偏小)選擇一個新的中間點作為下次要猜測的數。只要遵循這個策略,你最終一定會猜出正確的數。
int RbinSearch(int value, int lower, int upper){ if (lower > upper) return -1; else { int mid; mid = (int)(upper+lower) / 2; if (value < arr[mid]) return RbinSearch(value, lower, mid - 1); else if (value == arr[mid]) return mid; else return RbinSearch(value, mid + 1, upper); }}
尋找資料集合內的數值是一種隨處可見的電腦操作。最簡單的尋找資料集合的方法是從資料集合的頭部開始尋找資料項目,直到尋找到該資料項目或者執行到資料集合的末尾才結束。這種尋找方法最好用在資料集合相對較小且無序的時候。如果資料集合是有序排列的,那麼二叉尋找演算法會是一種較好的選擇。二叉尋找會持續劃分資料集合直到找到所要尋找的資料項目為止。大家可以採用迭代方式或遞迴方式編寫二叉尋找演算法。C#語言的Array 類包括有內建的二叉尋找方法。在調用二叉尋找的任何時候都應該可以使用此方法。