/* 数组的查找操作 练习:有一个有序的数组,将要将一个元素插入到该数组中,还要保证该数组是有序的 如何获取该元素获取数组中的位置 */ class ArrayTest4 { public static void main(String[] args) { int[] arr={1,3,5,9,32,45}; int index=getIndex_2(arr,9); System.out.println("index="+index); } public static int getIndex_2(int[] arr,int key) { int min=0,max=arr.length-1,mid; while(min<=max) //min,max之间有距离就可以折半 { mid=(max+min)>>1; if(key>arr[mid]) min=mid+1; else if(key<arr[mid]) max=mid-1; else return mid; } return min; } //折半的第二种方式 public static int halfSearch_2(int[] arr,int key) { int min=0,max=arr.length-1,mid; while(min<=max) //min,max之间有距离就可以折半 { mid=(max+min)>>1; if(key>arr[mid]) min=mid+1; else if(key<arr[mid]) max=mid-1; else return mid; } return -1; } /* 折半查找,提高效率,但是必须保证该数组时有序数组 */ public static int halfSearch(int[] arr,int key) { int min,max,mid; min=0; max=arr.length-1; mid=(max+min)/2; while(arr[mid]!=key) { if(key>arr[mid]) min=mid+1; else if(key<arr[mid]) max=mid-1; mid=(max+min)/2; if(min>max) return -1; } return mid; } //定义功能,获取key第一次出现在数组中的位置,如果返回-1,那么代表该key在数组中不存在 public static int getIndex(int[] arr,int key) { for(int x=0;x<arr.length;x++) { if(arr[x]==key) return x; } return -1; } }