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 }

猜你喜欢

转载自www.cnblogs.com/scwyqin/p/12315014.html