重溫二分查詢演算法
二分查詢在學習演算法的時候會涉及到,算是一個基本的分治思想,對於演算法的實現大家也都是很熟悉的,但是這個時候真會犯眼高手低的毛病。不信你自己試試,看你能夠在段時間內寫出可執行的二分查詢演算法。
二分查詢演算法的思想非常易於理解,但是能夠寫出一個準確的二分查詢程式絕非一個很簡單的事情,從歷史上來看,二分思想早在1946年就出現了,但是第一個完全正確的二分查詢演算法確實在1962年出現,計算機專家曾說過,90%以上的計算機專家不能再2個小時內寫出完全正確的二分查詢演算法。我反正是應了這句話,不過我不是計算機專家。
我們來看一個比較標準的二分查詢演算法
執行結果是4,即arr[4]=8
其實這個演算法還有一些值得思考的細節。比如求得兩個數之和的平均數
如果直接寫為middle=(left+right)/2就很可能出現數值溢位的情況。
可以使用下面的形式來避免,演算法博大精深,細節決定成敗。
middle=left+(right-left)/2;
二分查詢演算法的思想非常易於理解,但是能夠寫出一個準確的二分查詢程式絕非一個很簡單的事情,從歷史上來看,二分思想早在1946年就出現了,但是第一個完全正確的二分查詢演算法確實在1962年出現,計算機專家曾說過,90%以上的計算機專家不能再2個小時內寫出完全正確的二分查詢演算法。我反正是應了這句話,不過我不是計算機專家。
我們來看一個比較標準的二分查詢演算法
點選(此處)摺疊或開啟
-
package new_test;
public class BinarySearch {
int arr[];
public static void main(String args[]){
test();
}
public int binarySearch(int t,int[] arr){
int left=0;
int right=arr.length;
int middle;
while(left<=right){
middle=(left+right)/2;
if(t==arr[middle]){
return middle;
}
if(t>arr[middle]){
left=middle+1;
}
if(tright=middle-1;
}
}
return -1;
}
public static void test(){
int[] arr=new int[]{1,2,5,7,8,10,11,15,19,20};
System.out.println( new BinarySearch().binarySearch(8, arr));
}
}
其實這個演算法還有一些值得思考的細節。比如求得兩個數之和的平均數
如果直接寫為middle=(left+right)/2就很可能出現數值溢位的情況。
可以使用下面的形式來避免,演算法博大精深,細節決定成敗。
middle=left+(right-left)/2;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1451131/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 查詢演算法__二分查詢演算法
- 查詢演算法之二分查詢演算法
- 二分查詢演算法演算法
- 演算法->二分查詢演算法
- 【演算法】二分查詢演算法
- 二分查詢【折半查詢】演算法 PHP 版演算法PHP
- 查詢——二分查詢
- 演算法(一):二分查詢法演算法
- 二分查詢演算法詳解演算法
- [演算法]各種二分查詢演算法
- c#-二分查詢-演算法C#演算法
- 【演算法】二分查詢與暴力查詢(白名單過濾)演算法
- 小白懂演算法之二分查詢演算法
- 二分查詢及其變種演算法演算法
- 演算法一 二分查詢( by Python)演算法Python
- Java實現二分查詢演算法Java演算法
- LeetCode演算法—二分查詢LeetCode演算法
- 二分查詢(一)——純粹的二分查詢
- Python查詢-二分查詢Python
- 二分查詢
- 如何找東西?查詢演算法之順序查詢和二分查詢詳解演算法
- 每日一道演算法:二分查詢演算法
- 查詢演算法之二分法演算法
- 死磕演算法之二分查詢法演算法
- 順序查詢和二分查詢
- PHP二分查詢PHP
- 二分查詢法
- 從酒桌遊戲看二分查詢演算法遊戲演算法
- 資料結構與演算法-二分查詢資料結構演算法
- 【資料結構與演算法】—— 二分查詢資料結構演算法
- 前端開發中的二分查詢演算法前端演算法
- 資料結構與演算法——二分查詢演算法資料結構演算法
- 二分查詢 | 二分查詢的一種推薦寫法
- 查詢演算法集:順序查詢、二分查詢、插值查詢、動態查詢(陣列實現、連結串列實現)演算法陣列
- Android 面試常見 - 二分查詢演算法題Android面試演算法
- Python遞迴函式,二分查詢演算法Python遞迴函式演算法
- 【資料結構】折半查詢(二分查詢)資料結構
- 二分插入與二分查詢