题目
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组
这个就是直接插入排序的一次循环 吧
以下
import java.util.Scanner;
public class Problem30 {
public static int[] insert(int[]arr ,int n,int x ){
//创建一个临时数组,大小为n+1,并且将要插入的数x放至数组最后
int[] tempArray = new int [n+1];
tempArray[n]=x;
for (int i = 0; i <n ; i++) {
tempArray[i]=arr[i];
}
//寻找插入位置
for (int i = n-1 ; i >=0 ; i--) {
if(tempArray[i]>x){
tempArray[i+1]=tempArray[i];
//当i循环至0时,说明所有数都大于x,则将x插入tempArray[0]的位置上
if(i==0) {
tempArray[i]=x;
break;
}
}else {
tempArray[i+1] = x;
break;
}
}
return tempArray;
}
public static void main(String[] args) {
//一个有序的数组arr,n表示数组大小
int[] arr ={34,52,64,69,74,88,92,94,96,103};
int n = arr.length; // n为数组大小
//用Scanner读一个数x
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个要插入的数");
int x = scan.nextInt();
scan.close();
//传入数组、数组大小、要插入的数
int[]c=insert(arr,n,x);
for (int i = 0; i <c.length ; i++) {
System.out.print(c[i]+" ");
}
}
}
结果如下:
这个想了比较久,在创建临时数组那里,原本想用一个叫Arrays.copyOf()
的方法,但是最后发现原来的数组大小并不会发生改变 = = 最后还是新创建一个大小比原数组大小多1的数组。
还有一个问题就是在insert()方法里,i循环到0了,表示x已经比任何数都小了,那么插入要放到第一个if语句里……