package offer;
/**
* 插入排序
* 原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。
* 要点:设立哨兵,作为临时存储和判断数组边界之用。
*/
public class InsertSort {
private static void insertSort(int[] a){
int j ;
int tmp;
for (int i = 1 ; i < a.length ; i++){
tmp = a[i];//此次需要插入的数据 i就是要处理的位置 也是就j的初始位置
//以此递减遍历,插入新的数据,
//若tmp小于当前数据,则向后移动,直至大于等于要插入的值
for (j = i; j > 0 && tmp < a[j - 1]; j--){
a[j] = a[j-1];
}
a[j] = tmp;
}
}
public static void printArray(int[] a){
for (int i : a){
System.out.print(i + " ");
}
}
public static void main(String[] args){
int[] a = {1,4,3,5,2,6,9,8,7};
insertSort(a);
printArray(a);
}
}