题目:
随机生成一个长度为100的包含数字100的整型数组,使用二分法查找;
随机生成一个长度为100的包含数字100的整型数组,使用二分法查找;
步骤如下:
1. 随机生成一个长度为100的包含数字100的整型数组(代码如下:)
1. 随机生成一个长度为100的包含数字100的整型数组(代码如下:)
private static int[] arraysHundred() {
int []aa=new int[100];
Random ra=new Random();
int bb=ra.nextInt(99);
for (int i = 0; i < aa.length; i++) {
if(i!=bb) {
aa[i]=ra.nextInt(900);
}
else {
aa[i]=100;
}
}
return aa;
}
- 将数组排序
Arrays.sort(aa);
- 将数组输出
Arrays.stream(aa).forEach(u->{System.out.println(u);});
- 二分查找(jdk1.8或者以上)
private static int[] halfSearch(int key, int min, int max, int[] aa) {
int[] bb = new int[100];
int k = 0;
while (min <= max) {
int mid = (min + max) / 2;
if (key == aa[mid]) {
while (aa[mid] == aa[mid - 1]) {
mid--;
}
bb[k] = mid + 1;
while (aa[mid] == aa[mid + 1]) {
k++;
mid++;
bb[k] = mid + 1;
}
return bb;
} else if (key < aa[mid]) {
return halfSearch(key, min, mid - 1, aa);
} else {
return halfSearch(key, mid + 1, max, aa);
}
}
return bb;
}
- 过滤输出(jdk1.8或者以上)
Arrays.stream(bb).filter(e->bb[e]==0).forEach(u->{System.out.print("100在数组的位置是:");
System.out.println(u);});
完整代码如下:
package chat;
import java.util.Arrays;
import java.util.Random;
//题目:随机生成一个长度为100的包含数字100的整型数组,使用二分法查找;
public class BinarySearch {
public static void main(String[] args) {
//随机生成一个长度为100的包含数字100的整型有序数组
//将数组排序
//将数组输出
//二分查找
//将结果输出
int[] aa=arraysHundred();
Arrays.sort(aa);
Arrays.stream(aa).forEach(u->{System.out.println(u);});
int[] bb= halfSearch(100,0,99,aa);
Arrays.stream(bb).filter(e->bb[e]==0).forEach(u->{System.out.print("100在数组的位置是:");
System.out.println(u);});
}
private static int[] halfSearch(int key, int min, int max, int[] aa) {
int[] bb = new int[100];
int k = 0;
while (min <= max) {
int mid = (min + max) / 2;
if (key == aa[mid]) {
while (aa[mid] == aa[mid - 1]) {
mid--;
}
bb[k] = mid + 1;
while (aa[mid] == aa[mid + 1]) {
k++;
mid++;
bb[k] = mid + 1;
}
return bb;
} else if (key < aa[mid]) {
return halfSearch(key, min, mid - 1, aa);
} else {
return halfSearch(key, mid + 1, max, aa);
}
}
return bb;
}
private static int[] arraysHundred() {
int []aa=new int[100];
Random ra=new Random();
int bb=ra.nextInt(99);
for (int i = 0; i < aa.length; i++) {
if(i!=bb) {
aa[i]=ra.nextInt(900);
}
else {
aa[i]=100;
}
}
return aa;
}
}