對二分查詢程式的一次測試

2021-06-28 02:01:05 字數 1046 閱讀 1244

本文內容**於《程式設計珠璣》第二版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...