2、数据结构与算法——插入排序 - liuxiaofei2010S/special-column GitHub Wiki

插入排序的思想主要是类似于扑克牌的排序方法。在含有第一张的时候,后面的项会比较前面已经排列好的序列去插入当前项。从右到左依次观察大小顺序,如果大于当前项,则插入到它之前,也就是交换项的位置。

代码如下:

public class InsertSort {

    public static void main(String[] args) {
        System.out.print("——————————————————————————————");
        int[] array = new int[]{2, 4, 7, 0, 6, 8, 1, 5, 9, 3};
        sort(array);
        System.out.print("——————————————————————————————");
    }

    /*从右往左依次比较,如果小于某一项则更换位置*/
    private static void sort(int[] array) {
        for (int i = 1; i < array.length; i++) {
            for (int k = i; k > 0 && array[k] < array[k - 1]; k--) {
                exch(array, k, k - 1);
            }
        }
        for (int d = 0; d < array.length; d++) {
            System.out.print(array[d]);
        }
    }

    private static void exch(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

插入排序的效率一般交换次数为 N²/4,比较次数为 N²/4。最好的情况(完全有序)比较次数为 N-1,更换次数为 0;最坏情况(完全反序)交换次数为N²/2,比较次数为 N²/2。

插入排序适合于 部分有序 的数组,或者 小规模 数组。

倒置指的是数组中两个顺序颠倒的元素。插入排序的交换次数与倒置的次数是一致的。

部分有序数组:1、数组中每个元素与它的最终位置都不远;2、一个有序的大数组接一个小数组;3、数组中只有几个元素位置不正确。