Java例题_30 在已经排好序的数组中插入值
1 /*30 【程序 30 插入数字】
2 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
3 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的
4 数,依次后移一个位置。
5 */
6
7 /*分析
8 * 1、有一个从小到大排列好的数组,如:1,3,5,7,9,11,13,15,17,19,21;(共11个数,插入就12个了)
9 * 2、插入一个数(如10或者22);
10 * 3、(1)22的话,因为大于最后一个数,所有直接排在最后
11 * (2)10的话,因为要插入数组中,所有要移动11,13.。。等后面的数
12 * 4、难度就在怎么确定插入的位置,然后移动后腾出位置了才能插入======利用for循环,挨个遍历,找到a[i]<=x<=a[i+1]的地方,
13 * 然后用t作为中间变量来移动
14 * */
15
16 /*【注】
17 * 数组扩充 array = Arrays.copyOf(array, array.length + 1);// 数组扩容
18 * */
19
20
21 package homework;
22
23 import java.util.Arrays;
24 import java.util.Scanner;
25
26 public class _30 {
27
28 public static void main(String[] args) {
29 // 声明一个大小为12的整数型数组
30 int[] a={1,3,5,7,9,11,13,15,17,19,21};
31 //输入要插入的数
32 System.out.println("请输入要插入的整数:");
33 int x=new Scanner(System.in).nextInt();
34
35 //数组扩充===比较关键
36 a = Arrays.copyOf(a,a.length+1);
37 //声明一个整型表示数组长度
38 int length=a.length;
39
40 //比较要插入的数是否大于数组的最后一个数
41 // System.out.println(a[a.length-1]);
42 if(x>a[length-2]) { //x大于最后一个数
43 a[length-1]=x;
44 }
45 else { //x小于最后一个数
46 //声明一个location来存放找到的位置的数组下标
47 int location = 0;
48 //遍历数组,找到应该插入的位置
49 for (int i = 0; i < a.length; i++) {
50 if((a[i]<=x)&(a[i+1]>=x)) {
51 location=i+1; //找到这个位置的前一个数后,要插入到其中间,所有这里加1
52 break;
53 }
54 }
55 // //测试
56 // System.out.println(location);
57
58 //开始移动数据
59 for (int i = length; i > location; i--) {
60 a[i-1]=a[i-2];
61 }
62 a[location]=x;
63 }
64 //输出数组
65 for (int i = 0; i < a.length; i++) {
66 System.out.print(a[i]+" ");
67 }
68
69
70 }
71
72 }