使用二分法查找一个数组中的数值和索引
内附 插入排序!
public static void main(String[] args) {
// 定义一个无序数组;
int[] arr= {12,25,1,10,45,56,15,75,9,10,48,60,11};
// 调用method方法进行排序;
method(arr);
// 遍历排序后的数组;
for(int n:arr) {
System.out.print(n+",");
}
System.out.println();
// 给需要查找的数赋值;
int value=120;
// 调用二分法找出此数的索引;
int index=BinanrySearch.BinanrySearch(arr, value);
// 输出结果
if(index==-1) {
System.out.println("您要查询的数为:"+value+"; 查无此分数...");
}else {
System.out.println("找到分数:"+value+", 索引位置为:"+index);
}
}
// 将数组用 插入排序法 进行排序
public static void method(int[] arr) {
for(int i = 1;i<arr.length;i++) {
if(arr[i]<arr[i-1]) {
int j;
int x= arr[i];
for(j=i-1;j>=0&&x<arr[j];j--) {
arr[j+1] = arr[j];
}
arr[j+1] = x;
}
}
}
// 二分法查找数组中的某个数的具体位置(前提是需要在 有序 的数组中进行查找)
public static int BinanrySearch(int[] arr,int value) {
// 如果找不到,则返回-1;
int index=-1;
int low=0;
int high=arr.length-1;
// 循环查找;
while(high>=low) {
// 计算中间的索引值;
int mid=(low+high)/2;
// 获取中间索引值对应的数值;
int midnum=arr[mid];
// 判断比较,
if(value==midnum) {
index=mid;
break; // 找到此数,break中断循环;
}else if(value>midnum) {
// 将中间索引+1作为第二次查找的数组的最小索引;
low=mid+1;
}else {
// 将中间索引-1改为第二次查找数组的最大索引
high=mid-1;
}
}
return index;
}
结果如下图所示: