1、算法概念。
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
2、算法思想。
假设待排序的记录存放在数组a[1..n]中。初始时,a[1]自成1个有序区,无序区为a[2..n]。从i=2起直至i=n为止,依次将a[i]插入当前的有序区a[1..i-1]中,生成含n个记录的有序区。
3、实现思路。
①用一个临时变量temp存储第i个元素(i>=1,下标从0开始)。
②比较a[i] 和a[i-1],如果a[i]<a[i-1],则a[i] = a[i-1],即比a[i]大的集合元素依次往右移动一个单位。
③将temp的值赋给a[i].
4、实现代码。
import java.util.Scanner;
public class KMP {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {//可以多次测试
int count = in.nextInt();
int a[] = new int[count];
for(int i = 0;i<count;i++){
a[i] = in.nextInt();
}
//开始运算
int temp = 0;
for(int i = 1;i<a.length;i++){
temp = a[i];
int j = i-1;
for(;j>=0&& temp<a[j];j--){
a[j+1]=a[j];//将大于temp的值整体后移一个单位
}
a[j+1] = temp;
}
//输出排好序的数组
for(int i = 0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
}