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

2021-07-27 20:03:04 字數 1218 閱讀 4345

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其

缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的

關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置

記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的

記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

非遞迴實現

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 迴圈查詢...