Java之二分查找的注意事项

    技术2025-05-24  51

    package cn.itcast_03; /* * 注意:下面这种做法是有问题的 * 因为数组本身是无序的,所以这种情况下查找不能使用二分查找。 * 你先排序,但是你排序已经改变了原始的元素索引; * 所以这种方式是错误的,见到这种情况就用基本查找 * * */ public class 二分查找的注意 { public static void main(String[] args) { //定义一个数组 int[] arr= {24,69,80,57,13}; //先排序 bubbleSort(arr); //再查找 int index = getIndex(arr,80); System.out.println(index); } //冒泡排序 public static void bubbleSort(int[] arr) { for(int y=0;y<4;y++) { for(int x=0;x<arr.length-1-y;x++) { if(arr[x]>arr[x+1]) { int temp =arr[x]; arr[x] = arr[x+1]; arr[x+1] = temp; } } System.out.println("第"+y+"次比较后:"); printArray(arr); } } //遍历功能 public static void printArray(int[] arr) { System.out.print("["); for(int x = 0;x<arr.length;x++) { if(x==arr.length-1) { System.out.print(arr[x]); }else { System.out.print(arr[x]+","); } } System.out.println("]"); } //二分查找 public static int getIndex(int[] arr,int value) { //定义最大索引和最小索引 int max =arr.length-1; int min = 0; //计算出中间索引 int mid = (min+max)/2; //那中间索引进行比较 while(arr[mid] != value) { if(arr[mid]>value) { max = mid-1; }else if(arr[mid]<value){ min = mid+1; } if(min>max) { return -1; } mid = (min+max)/2; } return mid; } }
    Processed: 0.010, SQL: 9