作业目的:将一个老列表排序后,拷贝到一个新列表中,再往新列表中插入一个数
此处,新列表的最后一位数默认为0
目的是求出插入元素的索引位
此处,出现了两个55,并没有插入的原素
这样就好了,下面是源码:
package com.jh.test6;
import java.util.Arrays;
import java.util.Scanner;
public class jh_25_列表排序 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = {11, 22, 44, 23, 55, 6, 4, 7};
// 自动排序
Arrays.sort(arr);
// 创建新列表,长度加一
int[] newArr = new int[arr.length+1];
// 拷贝新列表,给新列表赋值
for (int i = 0; i < arr.length; i++) {
newArr[i] = arr[i];
}
// 打印输入新列表
for (int i = 0; i < newArr.length; i++) {
System.out.print(newArr[i]+" ");
}
System.out.println(" 请输入你要插入的元素:");
// 4 6 7 11 22 23 44 55 0
int num = scanner.nextInt();
// 默认索引为新列表的最后一个位置,
// 因为如果插入的数字比列表中的任何一个数都大,那么它的索引为是在最后一个位置
int index = newArr.length-1;
for (int i = 0; i < newArr.length; i++) {
if (num<newArr[i]){
index = i;
break;
}
}
System.out.println(index);
// 插入算法,将插入位置后的元素后移一位
// 4 6 7 11 22 23 44 55 0
// 要想后移,肯定是从后面遍历,并且是从倒数第二位,因为倒数第一位没法往后移了
// newArr[newArr.length-1] ----> 倒数第一位的位置(0的位置)
// newArr[newArr.length-1-1] ----> 倒数第二位的位置(55的位置)
for (int i = newArr.length-2; i >=index ; i--) {
// newArr[newArr.length-1] = newArr[newArr.length-1-1];
newArr[i+1] = newArr[i];
}
for (int i = 0; i < newArr.length; i++) {
System.out.print(newArr[i]+" ");
}
// 将增加的学员成绩插入到该列表中
newArr[index]=num;
System.out.println();
for (int i = 0; i < newArr.length; i++) {
System.out.print(newArr[i]+" ");
}
}
}