/* 数组的查找 折半查找:前提是该数组是有序的数组 */ import java.util.Scanner; public class arrLookup{ public static void main(String[] args){ int[] arr = {1,4,6,8,34,56,78}; System.out.println("Please enter the number you want to find:"); Scanner in = new Scanner(System.in); int number = in.nextInt(); //halfSearch int index = halfSearch(arr, number); System.out.println("index = "+index); //halfsearch_2 int index_2 = halfSearch_2(arr, number); System.out.println("index_2 = "+index_2); //练习:将元素有序插入数组 Scanner in_1 = new Scanner(System.in); int number_1 = in_1.nextInt(); int index_3 = getIndex(arr, number_1); System.out.println("index_3 = "+index_3); } //折半查找 public static int halfSearch(int[] arr, int key){ int min = 0; int max = arr.length-1; int mid = (min+max)/2; //判断是否找到key while(key != arr[mid]){ if(key > arr[mid]) //key大于中间值,把中间值后一个角标赋值给min,max不变 min = mid+1; else if(key < arr[mid]) //key小于中间值,把中间值前一个角标赋值给max,min不变 max = mid-1; if(min > max) //如果min>max,说明该数组内没有key return -1; //该数组没有key mid = (min+max)/2; //折半 } return mid; } //第二种折半查找 public static int halfSearch_2(int[] arr, int key){ int min = 0; int max = arr.length-1; int mid; //判断min是否小于等于max while(min <= max){ mid = (min+max)>>1; if(key > arr[mid]) min = mid+1; else if(key < arr[mid]) max = mid-1; else if(key == arr[mid]) //找到key,返回角标 return mid; } return -1; } //练习:将元素有序插入数组 public static int getIndex(int[] arr, int key){ int min = 0; int mid; int max = arr.length-1; while(min <= max){ mid = (min+max)>>1; if(key > arr[mid]) min = mid+1; else if(key < arr[mid]) max = mid-1; else if(key == arr[mid]) return min; } return min; } }