package Sort;
public class Insertion_Sort {
//测试数据
public static void main(String[] args) {
int [] a = {3,4,5,6,9,1,0,2,7,8};
//排序前
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
insertion_sort(a);
//排序后
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
//插入排序
public static void insertion_sort(int []a){
for(int j = 1; j < a.length; j++){
int key = a[j];
int i = j-1;
while(i >= 0 && a[i]>key){
a[i+1] = a[i];//将大数往后移
i--;
}
a[i+1] = key;//将小数插入
}
}
}
代码中6~18行main方法中为测试数据,第七行定义了一个数组a,第9~11行和15~17行为打印数组。第13行调用插入排序。第20~30为插入排序。
插入排序将未排序数组分为两堆,一个为排好序堆,另一个为未排序堆。每次从未排序堆中抽取一个数放入排好序堆中,然后着个比较大小,如果比之小,则放入此位置。直至未排序堆无数据。