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