1 二分法查找,是针对有序数组的
2 需要注意找不到的情况推出循环
import java.util.Arrays;
// 二分法
public class dichotomy {
// 冒泡排序
public static int[] sort(int[] a){
for(int i=0;i < a.length-1; i++){
for(int j=i+1; j<a.length; j++){
if(a[i] < a[j]){
}else if(a[i] > a[j]){
int tmp;
tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}else{
}
}
}
return a;
}
public static int find(int l,int r,int[] a,int i){
int half = (l+r)/2; //向下取整
//这里需要好好测试,有种情况是找到的时候,l也是等于r的,
if(i == a[half]){
return half;
}
//一直找不到的时候,上一步骤算出来的half有可能与l或者r相等了,不终止的话,就会死循环一直往下计算了
if(l >= r){
return -1;
}
if(i < a[half]){
return find(l,half,a,i);
}else if(i > a[half]){
return find(half+1,r,a,i);
}else if(i == a[half]){
return half;
}else{
return -1;
}
}
public static void main(String[] args){
int[] data = {3,7,8,1,2,0,5,4,9,12,6};
//二分查找必须是有序数组
int[] sorted_data = sort(data);
System.out.println(Arrays.toString(sorted_data));
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12],长度是10
// 二分查找12
int target = find(0,data.length-1,sorted_data,11);
//输出在有序数组中的位置
System.out.println(target);
}
}
java实现二分法查找
最新推荐文章于 2022-03-03 19:12:48 发布