如有错误,敬请指正。
1.二分查找
二分查找一定要先排序,针对数组中重复数据只能查询到一个。
import java.util.Arrays;
import java.util.Scanner;
public class BinarySearch{
public static void main(String[] args){
//int[] bsearch = new int[]{1, 2, 3, 4, 5, 6};
int[] bsearch = new int[6];
int max = bsearch.length - 1;
int min = 0;
int middle = (max + min) / 2;
Scanner input = new Scanner(System.in);
for(int i = 0; i < bsearch.length; i++){
bsearch[i] = (int) (Math.random() * 100) + 1;
}
Arrays.sort(bsearch);
System.out.println(Arrays.toString(bsearch));
//System.out.println("[0, 1, 2, 3, 4, 5]");
int num = input.nextInt();
while(max >= min){
// System.out.println(min + " " + max + " " + middle);
if(num < bsearch[middle]){
max = middle - 1;
} else if(num > bsearch[middle]){
min = middle + 1;
} else{
System.out.println(middle + " " + bsearch[middle]);
break;
}
middle = (max + min) / 2;
}
}
}
2.输出顺序无重复数的数组
首先给数组随机赋值,然后进行排序,其中可能会有重复的数,此时进行核心逻辑,我们已经将数组排序,观察发现重复的数一定排在相邻位置,如果相邻位置数据重复,将第二个重复位置重新赋值,立即退出循环继续寻找重复数据,直到没有重复数据,即循环次数为length-1,此时输出完成。
import java.util.Arrays;
public class SortNoRepeat{
public static void main(String[] args){
int[] SNR = new int[10];
for(int i = 0; i < SNR.length; i++){
SNR[i] = (int) (Math.random() * 15) + 1;
}
System.out.println(Arrays.toString(SNR));
while(true){
Arrays.sort(SNR);
System.out.println(Arrays.toString(SNR));
int i = 0;
for(; i < SNR.length - 1; i++){
if(SNR[i] == SNR[i + 1]){
SNR[i + 1] = (int) (Math.random() * 15) + 1;
break;
}
}
if(i == SNR.length - 1){
break;
}
}
System.out.println(Arrays.toString(SNR));
}
}