二分尋找Binary Search的思想:
以有序表表示靜態尋找表時,尋找函數可以用二分尋找來實現。
二分尋找(Binary Search)的尋找過程是:先確定待查記錄所在的區間,然後逐步縮小區間直到找到或找不到該記錄為止。
1二分尋找的時間複雜度是O(log(n)),最壞情況下的時間複雜度是O(n)。
假設 low 指向區間下界,high 指向區間上界,mid 指向區間的中間位置,則 mid = (low + high) / 2;
具體過程:
1.先將關鍵字與 mid 指向的元素比較,如果相等則返回mid。
2.關鍵字小於 mid 指向的元素關鍵字,則在 [ low, mid-1 ]區間中繼續進行二分尋找。
3.關鍵字大於mid 指向的元素關鍵字,則在[ mid +1 , high] 區間中繼續進行二分尋找。
用Python實現二分尋找樣本:
>>> def find(self, num): l = len(self) first = 0 end = l - 1 mid = 0 if l == 0: self.insert(0,num) return False while first < end: mid = (first + end)/2 if num > self[mid]: first = mid + 1 elif num < self[mid]: end = mid - 1 else: break if first == end: if self[first] > num: self.insert(first, num) return False elif self[first] < num: self.insert(first + 1, num) return False else: return True elif first > end: self.insert(first, num) return False else: return True>>> list_d = ['a','b','c','d','e','f','d','t']>>> value_d = 't'>>> aa=find(list_d,value_d)>>> aaTrue>>> value_d='ha'>>> aa=find(list_d,value_d)>>> aaFalse