一.順序搜索(Linear search)
對於一個n元數組,查找某一元素是否等於x,則需要將數組從頭到尾與x做判斷,運氣好的話,可能比較第一次就找到,運氣壞的話可能最後一個元素才找到或者都沒找不到,即元素比較次數是1~n之間。
輸入:n個元素的數組A[1...n]和元素x
輸出:如果x=A[j],1≤j≤n,則輸出j,否則輸出0
j<-1
while (j<n) and (x≠A[j])
j<-j+1
end while
if x=A[j] then return j else return 0
二.二分搜索(Binary search)
令A[low...high]爲元素按升序排列的非空數組,A[mid]爲中間元素,假定x>A[mid]且在A中,則它必在A數組的右半集合中,接下來只需在A[mid+1...high]中搜索x,A[low...mid]被丟棄掉。循環搜索,直至找到x。
low<-1, high<-n, j<-0
while (low≤high) and (j=0)
mid<-(low+high)/2(取下整)
if x=A[mid] then j<-mid
else if x<A[mid] then high<-mid-1
else low<-mid+1
end while
return j
對於一個大小爲n的排序數組,算法二分查找執行比較的最大次數爲。
證明過程:
整個搜索過程是都有元素折半的操作,第一次比較後,丟棄一半的元素,第二次比較再丟棄一半的一半的元素,直至結束。即,
第一次循環開始時元素的個數;
第二次循環開始時元素的個數;
第三次循環開始時元素的個數
第j次循環開始時元素的個數......
當=1時,算法結束,則j表示二分查找的最大比較次數,即時結束算法,化簡得,則,得證。