给定一组无序的数组来实现二分法查找
假如这一组数组是:12,55,69,13,9,56,11,36,7
以下就是该代码
public static void main(String[] args) {
int [] arr={12,13,54,68,89,77,88,9};
首先利用冒泡排序将无序变为有序
for(int i=0;i<arr.length;i++){ 控制轮数
for(int j=0;j<arr.length-i-1;i++){ 控制次数
if(arr[j]>arr[j+1]){ 这是从小到大排序 如果第一个大于第二个,那么就将第一个和第二个换位置
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t
}
}
}
for(int i=0;i<arr.length-1;i++){ 遍历
System.out.print(arr[i]); 输出
}
现在这组数组为有序的,那么怎么用二分法实现查找某一个,并输出下标呢,以下代码就是
int a=11 2要查找的是11
int start=0 数组的开始位置
int end=arr.length-1 数组的结果位置
while(end>start){ 只有结尾大于开始,就说明他们之间是有数据的
int c=(start+end)/2
if(arr[c]>a){ 如果你查找的a小于他的这个界限c,说明你找的在前半段,所以就是end结尾,也就明白为什么要-1
end=c-1
}else if(arr[c]<a){ 如果你查找的a大小于他的这个界限c,说明你找的在后半段,所以就是start开始,也就明白为什么要+1
start=c+1
}else{ 否则就是中间,正好是你要的值
System.err.println("恭喜你找到了,当前下标为"+c);
break;
}
}
System.out.println("没有找到"); 这是最有的一种,假如,你要找的数组里面没有,就会在输出这句话。
小女子不才,如有不妥之处,还请各位多多指教。