本文內容**於《程式設計珠璣》第二版5.2節。
先看一段程式:
public class errirbinary ;
public static int binarysearch(int number)
return -1;
} /**
* @param args
*/public static void main(string args)
}
這段程式的輸出如下:
0在陣列中的位置是: 0
1在陣列中的位置是: 1
2在陣列中的位置是: 2
3在陣列中的位置是: 3
顯然沒有找到4在陣列中的位置,邊界條件無法通過測試。
下面通過新增腳手架的方式進行跟蹤測試:
public class errirbinary ;
public static int binarysearch(int number)
return -1;
} /**
* @param args
*/public static void main(string args)
}
看一下輸出:
0 2 4
2 3 4
3 3 4
3 3 4
3 3 4
很顯然當start=3 ,end=4的時候程式陷入了死迴圈。
而修改方法很簡單
把
if (array[middle] < number)
start = middle;
else if (array[middle] > number)
end = middle;
修改為if (array[middle] < number)
start = middle + 1;
else if (array[middle] > number)
end = middle - 1;
即可。 二分查詢,返回第一次出現的位置
題目描述 對於乙個有序陣列,我們通常採用二分查詢的方式來定位某一元素,請編寫二分查詢的演算法,在陣列中查詢指定元素。給定乙個整數陣列a及它的大小n,同時給定要查詢的元素val,請返回它在陣列中的位置 從0開始 若不存在該元素,返回 1。若該元素出現多次,請返回第一次出現的位置。測試樣例 1,3,5,...
乙個二分查詢程式
原問題來自 http topic.csdn.net u 20090826 18 c08b69e8 ce22 4427 8687 ffb53e380437.html 問題如下 有一連串字母,由且必由若干個 a,b,c,d,e 組成,順序是 若干個 a,若干個 b,若干個 c,若干個 d,若干個 e 即...
二分查詢(一)
在演算法題目中,很重要的乙個就是邊界條件的設定,需要我們去明確,變數代表的含義,在迴圈的過程中一直保證此變數的含義不發生變化。含義不發生變化,而非變數值。class binaryclass system.out.println binarysearch2 arr,arr.length,4 publi...