@@ -13,36 +13,37 @@ public class BinarySearchTest {
1313 */
1414 @ Test
1515 public void test () {
16- int [] arr = new int [7 ];
17- arr [0 ] = 52 ;
18- arr [1 ] = 31 ;
19- arr [2 ] = 24 ;
20- arr [3 ] = 45 ;
21- arr [4 ] = 13 ;
22- arr [5 ] = 11 ;
23- arr [6 ] = 28 ;
24- assertThat (searchByRec (arr , 24 ), is (2 ));
25- assertThat (search (arr , 24 ), is (2 ));
16+ int [] arr1 = {11 ,22 ,33 ,44 ,55 ,66 ,77 ,88 };
17+ int [] arr2 = {11 ,22 ,33 ,44 ,55 ,66 ,77 };
18+ int [] arr3 = {1 };
19+ int [] arr4 = {};
20+ assertThat (search (arr1 , 33 ), is (2 ));
21+ assertThat (search (arr2 , 22 ), is (1 ));
22+ assertThat (search (arr3 , 1 ), is (0 ));
23+ assertThat (search (arr4 , 1 ), is (-1 ));
24+
25+ assertThat (searchByRec (arr1 , 33 ), is (2 ));
26+ assertThat (searchByRec (arr2 , 22 ), is (1 ));
27+ assertThat (searchByRec (arr3 , 1 ), is (0 ));
28+ assertThat (searchByRec (arr4 , 1 ), is (-1 ));
2629 }
2730
2831 // while version
2932 private int search (int [] arr , int target ) {
3033 if (arr == null ) return -1 ;
3134 int left = 0 ;
3235 int right = arr .length - 1 ;
33-
36+ int mid ;
3437 while (left <= right ) {
35- int mid = left + (right - left ) / 2 ;
38+ mid = left + (right - left ) / 2 ;
3639 if (arr [mid ] == target ) {
3740 return mid ;
3841 }
3942
4043 if (arr [mid ] < target ) {
41- left = mid ;
42- right -= 1 ;
44+ left = mid + 1 ;
4345 } else {
44- right = mid ;
45- left += 1 ;
46+ right = mid - 1 ;
4647 }
4748 }
4849 return -1 ;
@@ -61,9 +62,9 @@ private int searchRec(int[] arr, int left, int right, int target) {
6162 if (arr [mid ] == target ) {
6263 return mid ;
6364 } else if (arr [mid ] < target ) {
64- return searchRec (arr , mid , right - 1 , target );
65+ return searchRec (arr , mid + 1 , right , target );
6566 } else {
66- return searchRec (arr , left + 1 , mid , target );
67+ return searchRec (arr , left , mid - 1 , target );
6768 }
6869 }
6970}
0 commit comments