问题描述
输入:n个数的一个序列(a1,a2,a3…an)
输出:输入序列的一个排序(a1’,a2’,a3’…an’),满足a1’
INSERT-SORT(A)
for j=2 to A.length
key=A[j];
//Insert A[j] to sorted sequence A[1…j-1];
i=j-1;
while i>0 and A[i]>key
A[i+1] = A[i]
I=i-1
A[i+1] = key
算法复杂度
数组已排好序(最佳情况) O(n)
数组已经逆序(最坏情况) O(n2)
平均情况 O(n2)
import java.util.Random;
public class Main {
private static int N=10;//测试的数组长度
static Random rand = new Random();
public static void main(String[] args) {
// TODO Auto-generated method stub
test_ASC();
test_DES();
}
//测试升序
private static void test_ASC(){
int[] A=new int[N];
for(int i=0;i<N;i++){
A[i]=rand.nextInt(1000);
}
Insert_Sort_ASC(A);
}
//测试降序
private static void test_DES(){
int[] A=new int[N];
for(int i=0;i<N;i++){
A[i]=rand.nextInt(1000);
}
Insert_Sort_DES(A);
}
//插入排序-升序
private static void Insert_Sort_ASC(int[] A){
System.out.println("排序前:");
print(A);
int key;
int j;
for(int i=1;i<A.length;i++){
key=A[i];
j=i-1;
//找到合适的插入点 前面是已经排好序的数组
while(j>=0 && A[j]>key){
A[j+1]=A[j];
j--;
}
A[j+1]=key;
}
System.out.println("排序后(升序):");
print(A);
}
// 插入排序-降序
private static void Insert_Sort_DES(int[] A) {
System.out.println("排序前:");
print(A);
int key;
int j;
for(int i=1;i<A.length;i++){
key=A[i];
j=i-1;
//找到合适的插入点 前面是已经排好序的数组
while(j>=0 && A[j] < key){
A[j+1]=A[j];
j--;
}
A[j+1]=key;
}
System.out.println("排序后(降序):");
print(A);
}
//打印数组
private static void print(int[] A) {
// TODO Auto-generated method stub
for (int i = 0; i < A.length; i++) {
System.out.print(A[i]+"\t");
}
System.out.println();
}
}
运行截图