一、解决方案
    给定数组 a = [9,3,7,2,5,8,1,4], 对数组进行插入排序
    将数组分为两个区域,排序区域和未排序区域,每一轮从未排序区域中取出第一个元素,插入到排序区域(需保证顺序)
    重复以上步骤,直到整个数组有序
    双重循环,第一重循环i从1开始,a[i]作为要插入的元素,记录为tmp,第二重循环从j开始,倒着往回找,一旦j的数大于tmp,就将j的数往后挪,空出位置将tmp插入。
    二、代码

    1. public static void insert(int[] a){
    2. for (int i = 1; i < a.length; i++) {
    3. //要插入的元素
    4. int tmp = a[i];
    5. int j = i - 1;
    6. while(j>=0){
    7. if(a[j]>tmp){
    8. a[j+1] = a[j];
    9. }else{
    10. break;
    11. }
    12. j--;
    13. }
    14. a[j+1] = tmp;
    15. }
    16. System.out.println(Arrays.toString(a));
    17. }

    三、与选择排序比较

    1. 大部分情况下,插入都略优于选择;
    2. 有序集合插入的时间复杂度为O(n);
    3. 插入属于稳定排序算法,而选择属于不稳定排序。