二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其
缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的
關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置
記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的
記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
非遞迴實現
int bin_search(int a,int length,int target)
else if( a[mid] < target)
else
}return -1;
}
遞迴實現
int bin_search(int a,int low,int high,int target)
else if(a[mid] < target)
else
}
非遞迴實現
def bin_search(list,length,target):
low=0
high=length-1
while(low <= high):
mid = low +(high - low)/2
if(list[mid] > target):
high = mid -1
elif(list[mid] < target):
low = mid + 1
else:
return mid
return -1
遞迴實現
def bin_search(list,low,high,target):
if low < high:
return -1;
if list[mid] > target:
return bin_serch(list,low,mid-1,target)
elif list[mid] < target:
return bin_serch(list,mid+1,high,target)
else:
return mid
資料結構與演算法之二分查詢
假設我們有1000萬個整數資料,每個資料佔8個位元組,如何設計資料結構和演算法,快速判斷某個整數是否出現在這1000萬資料中?我們希望這個功能不要占用太多的記憶體空間,最多不要超過100m,你會怎麼做?二分查詢時一種非常簡單易懂的快速查詢演算法,生活中到處可見。比如說,我們現在來做乙個猜字遊戲。我隨...
資料結構與演算法之二分查詢
二分查詢法作為一種常見的查詢方法,將原本是線性時間提公升到了對數時間範圍,大大縮短了搜尋時間,但它有乙個前提,就是必須在有序資料中進行查詢。二分查詢過程如下 1.將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 2.否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵...
資料結構與演算法之二分查詢法
public static void main string args 目標元素 int target 9 目標元素的索引 int index 1 記錄開始位置 int begin 0 記錄結束位置 int end arr.length 記錄中間位置 int mid begin end 2 迴圈查詢...