1 class ArrayOperateDemo4 2 { 3 public static void main(String[] args) 4 { 5 /* 6 数组操作:查找 7 找一个元素在数组中的存在的位置 8 9 10 */ 11 12 //int[] arr={7,28,12,30,61}; 13 //int index =getIndex(arr,28) 14 //System.out.println("index="+index); 15 int[] arr={9,,14,24,38,44,77,90}; 16 17 int index =binarySearch(arr,77); 18 System.out.println("index="+index); 19 20 } 21 22 /* 23 演示二分查找法,前提:只能对有序的数组进行查找。 24 */ 25 public static int getIndex(int[] arr,int key) 26 { 27 //1,需要定义三个变量,用于记录住角标的变化。 28 int min,max,mid; 29 min =0; 30 max =arr.length-1; 31 32 //只要min和max之间有距离,就有了折半的可能,而且有可能折半多次,使用while循环 33 34 while(min<=max) 35 { 36 //获取中间角标 37 mid =(max+min)/2;//mid = (max+min)>>1; 38 39 //获取中间角标上的元素和key进行比较、 40 //来确定min和max的新值,或者叫做,确定新的查找范围 41 if (key>arr[mid]) 42 { 43 min = mid+1; 44 } 45 else if (key<arr[mid]) 46 { 47 max= mid -1; 48 } 49 else 50 return mid; 51 } 52 return -1; 53 } 54 //二分查找法的另外一种写法。 55 public static int binarySearch_2(int[] arr,int key) 56 { 57 int min,max,mid; 58 min = 0; 59 max = arr.length-1; 60 mid = (max+min)>>1; 61 62 while(arr[mid] != key) 63 { 64 if (key>arr[mid]) 65 { 66 min =mid +1; 67 } 68 else if(key<arr[mid]) 69 max=mid -1; 70 if(min>max) 71 return -1; 72 mid=(max+min)>>1; 73 74 } 75 return mid; 76 } 77 } 78
1 class ArrayOperateTest 2 { 3 public static void main(String[] args) 4 { 5 6 7 int[] arr={9,,14,24,38,44,77,90}; 8 9 int index =getInsertIndex(arr,77); 10 System.out.println("index="+index); 11 12 } 13 14 /* 15 思考题: 16 有一个有序的数组,要求如果网这个数组中添加一个元素,还能继续保证这个数组有序。 17 那么这个元素的位置该如何获取? 18 19 思路: 20 1,既然是有序的数组,还有获取位置,这就是在查找,而且是有序就可以用二分查找 21 2,如果要插入的元素数组中已存在,只要找这个元素的位置就是要插入的位置 22 3,如果要插入的元素在数组中不存在,那么在最后查找的头角标插入即可 23 */ 24 25 public static int getInsertIndex(int[] arr,int key) 26 { 27 //1,需要定义三个变量,用于记录住角标的变化。 28 int min,max,mid; 29 min =0; 30 max =arr.length-1; 31 32 //只要min和max之间有距离,就有了折半的可能,而且有可能折半多次,使用while循环 33 34 while(min<=max) 35 { 36 //获取中间角标 37 mid =(max+min)/2;//mid = (max+min)>>1; 38 39 //获取中间角标上的元素和key进行比较、 40 //来确定min和max的新值,或者叫做,确定新的查找范围 41 if (key>arr[mid]) 42 { 43 min = mid+1; 44 } 45 else if (key<arr[mid]) 46 { 47 max= mid -1; 48 } 49 else 50 return mid; 51 } 52 return min; 53 54 } 55 56 } 57