题目描述
使用插入排序对给定数组从小到大排序,不需要输出排序后的数组,需输出从第二个元素开始每个元素插入的的位置。
输入
第一行一个正整数n。(1<=n<=5e3)
第二行n个整数 数据保证在int范围内(保证没有重复数字)
输出
从第二个数开始输出每个数插在哪个位置。
样例输入
5
5 4 3 2 1
样例输出
0 0 0 0
提示
样例解释``
5 4 3 2 1
[5]就当成已经排好序的数组,4需要插在数组[5]的0位置,数组变为[4,5],3需要插在数组[4,5]的0位置,数组变为[3,4,5],以此类推。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
int[] index=new int[a.length-1];
for (int i=0;i<n;i++)
a[i]= sc.nextInt();
index(a);
}
public static void index(int[] a){
int[] index=new int[a.length];
index[0]=0;
for (int i = 1;i < a.length;i++){
for (int j = i-1; j >= 0; j--) {
if(a[i]<a[j])
index[i] = j;
else {
index[i] = j+1;
break;
}
}
forward_insert(a,index[i],i);
System.out.print(index[i]+" ");
}
}
public static void forward_insert(int[] a,int x,int y){
for (int i=x;i<y;i++){
int n=a[y];
a[y]=a[i];
a[i]=n;
}
}
}