不含重复元素
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("查找的元素不存在");
}
}
}