直接插入排序

2020-09-09  本文已影响0人  亼珏

基本思想

      直接插入排序是将一个记录插入到已经排好序的有序表中,从而得到一个新的记录数增1的有序表。

直接插入排序算法

    void insertSort(int[] array) {
        int length = array.length;
        int j = 0;
        for (int i = 1; i < length; i++) {
            if (array[i - 1] > array[i]) {
                int tmp = array[i];
                j = i - 1;
                for (j = i - 1; j >= 0 && array[j] > tmp; j--) {
                    array[j + 1] = array[j];
                }
                array[j + 1] = tmp;
            }
        }
    }

直接插入排序算法的时间复杂度

      最好情况下,排序表本身就是有序的,比较记录是n-1次,没有移动记录,时间复杂度O(n)。
      最坏情况下,排序表本事是逆序的,比较记录是2+3+······+n次,也就是(n+2)(n-1)/2次,记录的移动次数也达到最大值3+4+······+(n+1)次,也就是(n+4)(n-1)/2次。
      若排序记录是随机的,根据概率相同原则,平均比较和移动次数约为(n2)/4,所以直接插入排序的时间复杂度为O(n2)。

上一篇下一篇

猜你喜欢

热点阅读