資料結構與演算法(十三) 二分查詢

2021-10-06 04:31:04 字數 734 閱讀 7119

資料是有序的;

資料是連續、順序儲存的,也即:儲存形式為陣列;

更適合於大規模靜態資料(無頻繁增刪);

針對陣列a,待查詢元素value,設定low、high分別為陣列頭尾下標;

1. 令mid = (low+high)//2;

2. 若a[mid] == value,則返回mid,否則:

2.1. 若value2.2. 若value>a[mid],low = mid+1;

3. 直到low<=high,退出;

可見,二分查詢的時間複雜度為:

def bisearch(a, value):

low, high = 0,len(a)-1

while low <= high:

mid = low+((high-low)>>1)

if value == a[mid]:

return mid

elif value < a[mid]:

high = mid - 1

elif value > a[mid]:

low = mid + 1

return -1

a = [1,2,3,4,5,6,7,8,9]

value = 3

print("待查詢數字%d在陣列中的下標為:%d"%(value,bisearch(a,value)))

# 待查詢數字3在陣列中的下標為:2

資料結構與演算法 九 二分查詢

適用於排好序的資料,如 int array 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則...

資料結構與演算法 二分查詢

二分查詢的思想是在已經排序 公升序 的陣列中,如果要查詢的數比中位數小,那麼其位置只可能在左半部分,相反只能在右半部分。這樣每次把查詢區間縮小一半,比順序查詢效率快得多。非遞迴寫法 public static int binarysearchinasclooply int nums,int star...

資料結構與演算法,二分查詢

1.時間複雜度 每次能去掉一半即 logn 2.實現方式 while迴圈 與 遞迴 我更推薦 while 迴圈,因為遞迴有個潛在的問題就是 stack over flow 堆疊溢位 而且在實際工程中是盡量避免遞迴的。雖然遞迴寫起來方便,也不容易出錯。3.實現關鍵點 我總結了下,一共有以下四點 sta...