package algorithm.sort;

import java.util.Arrays;

/**
 * 直接插入排序
 * 算法思想:将一个记录插入到已排好序的序列中,从而得到一个新的有序序列(将序列的第一个数据看成
 *             是一个有序的子序列,然后从第二个记录逐个向该有序的子序列进行有序的插入,直至整个序列有序)
 * @author camus
 *
 */
public class DirectInsertSort {
    public static void main(String[] args) {
        int[] arr = {16,6,3,4,12,8,1,9,2};
        //16 6 3 4 12 8 1 9 2
        //1、6 16 3 4 12 8 1 9 2     i=1,6与16比较,结果 6 16
        //2、3 6 16 4 12 8 1 9 2     i=2,3与16比较,再与6比较,结果3 6 16
        //3、3 4 6 16 12 8 1 9 2     i=3,3 4 6 16
        //4、3 4 6 12 16 8 1 9 2
        //5、3 4 6 8 12 16 1 9 2
        //6、1 3 4 6 8 12 16 9 2
        //7、1 3 4 6 8 9 12 16 2
        //8、1 2 3 4 6 8 9 12 16  
        int temp;
        for (int i=1;i<arr.length;i++){
            //待排元素小于有序序列的最后一个元素时,向前插入
            if (arr[i]<arr[i-1]){
                temp = arr[i];
                for (int j=i;j>=0;j--){
                    if (j>0 && arr[j-1]>temp) {
                        arr[j]=arr[j-1];//小的值向前插入
                    }else {
                        arr[j]=temp;
                        break;
                    }
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}
12-19 11:30