@@ -13,36 +13,37 @@ public class BinarySearchTest {
13
13
*/
14
14
@ Test
15
15
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 ));
26
29
}
27
30
28
31
// while version
29
32
private int search (int [] arr , int target ) {
30
33
if (arr == null ) return -1 ;
31
34
int left = 0 ;
32
35
int right = arr .length - 1 ;
33
-
36
+ int mid ;
34
37
while (left <= right ) {
35
- int mid = left + (right - left ) / 2 ;
38
+ mid = left + (right - left ) / 2 ;
36
39
if (arr [mid ] == target ) {
37
40
return mid ;
38
41
}
39
42
40
43
if (arr [mid ] < target ) {
41
- left = mid ;
42
- right -= 1 ;
44
+ left = mid + 1 ;
43
45
} else {
44
- right = mid ;
45
- left += 1 ;
46
+ right = mid - 1 ;
46
47
}
47
48
}
48
49
return -1 ;
@@ -61,9 +62,9 @@ private int searchRec(int[] arr, int left, int right, int target) {
61
62
if (arr [mid ] == target ) {
62
63
return mid ;
63
64
} else if (arr [mid ] < target ) {
64
- return searchRec (arr , mid , right - 1 , target );
65
+ return searchRec (arr , mid + 1 , right , target );
65
66
} else {
66
- return searchRec (arr , left + 1 , mid , target );
67
+ return searchRec (arr , left , mid - 1 , target );
67
68
}
68
69
}
69
70
}
0 commit comments