排序----插入排序

一.原理

  1.1.动态演示图

  

  1.2.动态图讲解

  插入排序可以将数组看成两部分,一部分有序,一部分无序;默认下标为0有序,后面无序元素逐一与有序部分比较插入到指定位置,直至数组有序。

  1.3.数据样式

  原始数据:8 4 7 10 6 5 4 8

  第一次排序过程:4 8 7 10 6 5 4 8

  第二次排序过程:4 7 8 10 6 5 4 8

     ......

二.代码实现

public class ArraySortUtils {

    /**
     * 返回数组的字符串
     * @param array
     * @return
     */
    public static String arrayToString(int[] array){
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < array.length; i++) {
            if( i != (array.length - 1)){
                sb.append(array[i] + ",");
            }else{
                sb.append(array[i] + "]");
            }
        }
        return sb.toString();
    }


    /**
     * 插入排序
     * @param array
     */
    public static void insertSort(int[] array){

        //将数组看成两部分index>0 index=0 默认index=0有序,将index>0的元素插入到有序中
        for(int i = 1; i < array.length;i++){
            //记录要插入的数据
            int record = array[i];
            //将要插入数据与有序部分比较,找到要插入的下标
            int j;
            for(j = i - 1; j >= 0 && record < array[j]; j--){
                array[j+1] = array[j];
            }
            array[j+1] = record;
            System.out.println("第" + i +"次排序后的结果:" + arrayToString(array));
        }
    }
}

三.演示结果

public class ArraySortUtilsDemo {

    public static void main(String[] args) {
        //4 8 7 10 6 5 4 8
        //4 7 8 10 6 5 4 8
        int[] array = new int[]{8,4,7,10,6,5,4,8};
        System.out.println("排序前:" + ArraySortUtils.arrayToString(array));
        //ArraySortUtils.bubbleSort(array);
        //ArraySortUtils.quickSort(array);
        ArraySortUtils.insertSort(array);
        System.out.println("排序后:" + ArraySortUtils.arrayToString(array));
    }
}

演示结果与数据演示推理一样:

排序前:[8,4,7,10,6,5,4,8]
第1次排序后的结果:[4,8,7,10,6,5,4,8]
第2次排序后的结果:[4,7,8,10,6,5,4,8]
第3次排序后的结果:[4,7,8,10,6,5,4,8]
第4次排序后的结果:[4,6,7,8,10,5,4,8]
第5次排序后的结果:[4,5,6,7,8,10,4,8]
第6次排序后的结果:[4,4,5,6,7,8,10,8]
第7次排序后的结果:[4,4,5,6,7,8,8,10]
排序后:[4,4,5,6,7,8,8,10]

猜你喜欢

转载自www.cnblogs.com/NTBLL/p/10745383.html