二分查找法的前提是数据必须是有序排列的数据,如果不是那将失去二分查找法的意义。
其中二分查找法有两种实现方式while、递归方法实现。下面我们来看下它的代码。
public class maxtest {
public static void main(String[] args) {
//###################二分查找法start###################//
int[] arrays = {113,16,24,22,218,25,23,8,13,6,215,123,218,113,14,222,28,213,4,2,17,5,12,117,15,122,18,26,214,212,117,216};
int temporary;
for (int j = 0; j < arrays.length-1; j++) {
for (int i = 0; i < arrays.length; i++) {
if (arrays.length-1 == i) {
break;
}else{
if (arrays[i] > arrays[i+1]) {
temporary = arrays[i];
arrays[i] = arrays[i+1];
arrays[i+1] = temporary;
}
}
}
}
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i]+" ");
}
System.out.println("\n调用递归方法结果:"+binarySearch(arrays,0,arrays.length-1,24));//递归方法调用
System.out.println("\n调用while方法结果:"+binarySearch(arrays,24));//while方法调用
//###################二分查找法start###################//
}
//二分查找法递归实现
public static int binarySearch(int[] arrays, int start, int end,int des){
int mid=(start+end)/2;
if (arrays[mid] == des) {
return mid;
}
if (start >= end) {
return -1;
}else if (arrays[mid] < des) {
return binarySearch(arrays, mid+1, end, des);
}else if(arrays[mid] > des){
return binarySearch(arrays, start, mid-1, des);
}
return -1;
}
//二分查找法while实现
public static int binarySearch(int[] arrays, int des){
int mid=arrays.length/2;
if (arrays[mid] == des) {
return des;
}
int low = 0;
int high = arrays.length-1;
while(low <= high) {
int middle = (low + high)/2;
if(des == arrays[middle]) {
return middle;
}else if(des
high = middle - 1;
}else {
low = middle + 1;
}
}
return -1;
}
结果如下:
2 4 5 6 8 12 13 14 15 16 17 18 22 23 24 25 26 28 113 113 117 117 122 123 212 213 214 215 216 218 218 222
调用递归方法结果:14
调用while方法结果:14
示意图