不含重复元素
package binarySearch;
import org. junit. Test;
import java. util. Arrays;
public class SimpleBinarySearch {
public int binarySearch ( int [ ] array, int value) {
int low = 0 ;
int high = array. length - 1 ;
while ( low <= high) {
int mid = ( low + high) / 2 ;
if ( array[ mid] == value) {
return mid;
} else if ( array[ mid] < value) {
low = mid + 1 ;
} else {
high = mid - 1 ;
}
}
return - 1 ;
}
public int recursionBinarySearch ( int [ ] array, int value, int low, int high) {
if ( low > high) {
return - 1 ;
}
int mid = ( low + high) / 2 ;
if ( array[ mid] == value) {
return mid;
} else if ( array[ mid] < value) {
return recursionBinarySearch ( array, value, mid + 1 , high) ;
} else {
return recursionBinarySearch ( array, value, low, mid - 1 ) ;
}
}
@Test
public void testBinarySearch ( ) {
int [ ] array = new int [ 10 ] ;
array[ 0 ] = 6 ;
array[ 1 ] = 12 ;
array[ 2 ] = 15 ;
array[ 3 ] = 19 ;
array[ 4 ] = 24 ;
array[ 5 ] = 26 ;
array[ 6 ] = 29 ;
array[ 7 ] = 35 ;
array[ 8 ] = 46 ;
array[ 9 ] = 67 ;
System. out. println ( Arrays. toString ( array) ) ;
int i = recursionBinarySearch ( array, 15 , 0 , array. length - 1 ) ;
if ( i != - 1 ) {
System. out. println ( "找到了目标元素的下标:" + i + "---对应的值为:" + array[ i] ) ;
} else {
System. out. println ( "查找的元素不存在" ) ;
}
}
}
包含重复元素的实现四种查找要求
package binarySearch;
import org. junit. Test;
public class BinarySearch {
public int binarySearch ( int [ ] array, int value) {
int low = 0 ;
int high = array. length - 1 ;
while ( low <= high) {
int mid = ( low + high) / 2 ;
if ( array[ mid] == value) {
if ( mid == 0 || array[ mid- 1 ] != value) {
return mid;
} else {
high = mid - 1 ;
}
} else if ( array[ mid] < value) {
low = mid + 1 ;
} else {
high = mid - 1 ;
}
}
return - 1 ;
}
@Test
public void test1 ( ) {
int [ ] array = new int [ 10 ] ;
array[ 0 ] = 6 ;
array[ 1 ] = 12 ;
array[ 2 ] = 15 ;
array[ 3 ] = 19 ;
array[ 4 ] = 24 ;
array[ 5 ] = 26 ;
array[ 6 ] = 29 ;
array[ 7 ] = 29 ;
array[ 8 ] = 29 ;
array[ 9 ] = 67 ;
int i = binarySearch3 ( array, 29 ) ;
if ( i != - 1 ) {
System. out. println ( "找到了目标元素的下标:" + i + "---对应的值为:" + array[ i] ) ;
} else {
System. out. println ( "查找的元素不存在" ) ;
}
}
public int binarySearch2 ( int [ ] array, int value) {
int low = 0 ;
int high = array. length - 1 ;
while ( low <= high) {
int mid = ( low + high) / 2 ;
if ( array[ mid] == value) {
if ( mid == array. length - 1 || array[ mid+ 1 ] != value) {
return mid;
} else {
low = mid + 1 ;
}
} else if ( array[ mid] < value) {
low = mid + 1 ;
} else {
high = mid - 1 ;
}
}
return - 1 ;
}
@Test
public void test2 ( ) {
int [ ] array = new int [ 10 ] ;
array[ 0 ] = 6 ;
array[ 1 ] = 12 ;
array[ 2 ] = 15 ;
array[ 3 ] = 19 ;
array[ 4 ] = 24 ;
array[ 5 ] = 26 ;
array[ 6 ] = 29 ;
array[ 7 ] = 29 ;
array[ 8 ] = 29 ;
array[ 9 ] = 67 ;
int i = binarySearch2 ( array, 29 ) ;
if ( i != - 1 ) {
System. out. println ( "找到了目标元素的下标:" + i + "---对应的值为:" + array[ i] ) ;
} else {
System. out. println ( "查找的元素不存在" ) ;
}
}
public int binarySearch3 ( int [ ] array, int value) {
int low = 0 ;
int high = array. length - 1 ;
while ( low <= high) {
int mid = ( low + high) / 2 ;
if ( array[ mid] >= value) {
if ( mid == 0 || array[ mid- 1 ] < value) {
return mid;
} else {
high = mid - 1 ;
}
} else {
low = mid + 1 ;
}
}
return - 1 ;
}
@Test
public void test3 ( ) {
int [ ] array = new int [ 10 ] ;
array[ 0 ] = 6 ;
array[ 1 ] = 12 ;
array[ 2 ] = 15 ;
array[ 3 ] = 19 ;
array[ 4 ] = 24 ;
array[ 5 ] = 26 ;
array[ 6 ] = 29 ;
array[ 7 ] = 29 ;
array[ 8 ] = 29 ;
array[ 9 ] = 67 ;
int i = binarySearch3 ( array, 23 ) ;
if ( i != - 1 ) {
System. out. println ( "找到了目标元素的下标:" + i + "---对应的值为:" + array[ i] ) ;
} else {
System. out. println ( "查找的元素不存在" ) ;
}
}
public int binarySearch4 ( int [ ] array, int value) {
int low = 0 ;
int high = array. length - 1 ;
while ( low <= high) {
int mid = ( low + high) / 2 ;
if ( array[ mid] <= value) {
if ( mid == array. length - 1 || array[ mid+ 1 ] > value) {
return mid;
} else {
low = mid + 1 ;
}
} else {
high = mid - 1 ;
}
}
return - 1 ;
}
@Test
public void test4 ( ) {
int [ ] array = new int [ 10 ] ;
array[ 0 ] = 6 ;
array[ 1 ] = 12 ;
array[ 2 ] = 15 ;
array[ 3 ] = 19 ;
array[ 4 ] = 24 ;
array[ 5 ] = 26 ;
array[ 6 ] = 29 ;
array[ 7 ] = 29 ;
array[ 8 ] = 29 ;
array[ 9 ] = 67 ;
int i = binarySearch4 ( array, 23 ) ;
if ( i != - 1 ) {
System. out. println ( "找到了目标元素的下标:" + i + "---对应的值为:" + array[ i] ) ;
} else {
System. out. println ( "查找的元素不存在" ) ;
}
}
}