场景 数组 int[] arr=new int[]{1,34,7,5,21}需要快速的找到某个数的下标
那么我们可以使用二分查找来快速找到这个数的下标,但二分查找数组需要有序且无重复的
先进行排序,这里我使用的是冒泡排序
public static void main(String[] args) { int[] arr = new int[] { 1, 34, 7, 5,21}; System.out.println(Arrays.toString(sort(arr))); } //冒泡排序 public static int[] sort(int[] arr){ int temp; for(int i=0;i<arr.length-1;i++) {//外层控制循环次数 for (int j = arr.length - 1; j > i; j--) {//内层循环控制每一趟排序的次数 if (arr[j - 1] > arr[j]) { temp = arr[j - 1]; arr[j - 1] = arr[j]; arr[j] = temp; } } } return arr; }
排好序之后就可以使用二分查找了
public static void main(String[] args) { int[] arr = new int[] { 1, 34, 7, 5,21}; System.out.println(Arrays.toString(sort(arr))); System.out.println(search(arr,7)); } //冒泡排序 public static int[] sort(int[] arr){ int temp; for(int i=0;i<arr.length-1;i++) { for (int j = arr.length - 1; j > i; j--) { if (arr[j - 1] > arr[j]) { temp = arr[j - 1]; arr[j - 1] = arr[j]; arr[j] = temp; } } } return arr; } //二分查找 public static int search(int[] arr, int key) { int start=0; int end=arr.length-1; while(start<=end){ int middle=(start+end)/2; if(key<arr[middle]){ end=middle-1; }else if(key>arr[middle]){ start=middle+1; }else { return middle; } } return -1; }