二分查詢的條件是對一組有序陣列的查詢,這一點很容易忘記,在使用二分查詢的時候先要對陣列進行排序。
先說一下二分查詢的思路:乙個有序陣列,想要查詢乙個數字key的下標,首先算出中間下標mid,利用mid把這個陣列分為兩半,前一半從下標0到mid-1,後一半從mid+1到陣列最後乙個元素(下標是陣列長度減一)。把這個查詢的元素key和陣列下標為mid的元素進行比較,也就是和中間那個元素進行比較,如果比這個元素的小那麼把查詢範圍縮小到原陣列的前一半(把查詢下標縮短到0到mid-1),如果比中間mid下標元素大那麼範圍就是後半部分(下標為mid+1到陣列長度減一),這樣來回反覆取中間比較最後就會定位到要查詢元素key的下標。
二分查詢有兩種實現方式:
非遞迴實現
遞迴實現
在jdk原始碼中arrays陣列工具類中已經封裝好了二分查詢演算法,不會寫可以看看原始碼,原始碼實現的方式肯定是效率比較高的。比如計算陣列中間下標mid利用移位運算。
* @param array 運算元組
* @param key 查詢元素
* @return 元素下標
*/public static int binsearch(int array,int key)else
} return -1;
}
/**
* @param array 運算元組
* @param key 查詢元素
* @param start 開始下標
* @param end 結束下標
* @return 元素下標
*/public static int binsearch1(int array,int key,int start,int end)
else if(start>=end)
else if(key>array[mid])
else if(key
return -1;
}
二分查詢演算法的兩種方式
二分查詢演算法 binary search 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好,占用系統記憶體較少 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較...
二分查詢的兩種實現方式
二分查詢是一種常用的演算法,其輸入是乙個有序的元素列表 必須是有序的 如果查詢的元素包含在列表中,二分查詢返回其位置,否則返回false。由於二分查詢每次都是將序列折半,因此時間複雜度為o logn 下面按照非遞迴和遞迴兩種形式利用python進行實現 def er fen li,value sta...
演算法 兩種方式(遞迴 迴圈)實現二分查詢
程式由golang實現,如下 1.使用遞迴實現二分查詢 使用遞迴進行二分查詢 func binarysearchtest value 2 var index int searchindex nums,value fmt.println index index 在nums中查詢元素value,返回in...