排序演算法(三) 直接插入排序演算法及其優化分析

2021-09-13 19:33:30 字數 1868 閱讀 8463

目錄

1.直接插入排序:

2.演算法優化分析:

3.時間複雜度分析:

4.空間複雜度分析:

插入排序:就是將乙個元素插入到乙個排好序的有序陣列中。具體怎麼理解呢?

對於乙個包含n個陣列的元素,他會從 [0,1] 區間開始插入排序,即將 1 插入到陣列 的合適位置;接著從 [0,2] 區間開始排序,即將 4 插入到陣列 的合適位置。依次類推,總共執行n-1輪。

注意:將待排序元素插入到陣列的合適位置時,其後的陣列元素需要一次後移一位。

原始陣列214   3   5

一輪排序1   243   5

二輪排序1   2   435

三輪排序1   2   3   45

四輪排序   1   2   3   4   5

public class insertsort 

arr[k] = temp; //將臨時變數中的待排序元素放到陣列的合適位置

}} }

}

插入排序需要不斷將乙個元素插入到有序陣列的合適位置,正常情況下需要從一端逐個比較,直到滿足條件為止。最壞的情況下需要與有序陣列中的每個元素都比較一下,因此在查詢有序陣列合適位置時可以使用二分查詢演算法進行優化。

public class insertsort_opt else else if(high > arr[middleindex]) else 

} }public static void insertsort(int arr)

arr[index] = temp;

}} }

}

3.1優化前:

對於元素個數為n的陣列:

1.第一輪從第二個元素開始,與前面的有序陣列元素依次比較,需要比較 1 次,之後插入到陣列的合適位置,其後元素依次後移一位,同時維護待排序元素的索引值(+1);

2.第二輪從第三個元素開始,與前面的有序陣列元素依次比較,需要比較 2 次,之後插入到陣列的合適位置,其後元素依次後移一位,同時維護待排序元素的索引值(+1);

3.第n-1輪從第n個元素開始,與前面的有序陣列元素依次比較,需要比較 n-1 次,之後插入到陣列的合適位置,其後元素依次後移一位,同時維護待排序元素的索引值(+1);

根據等差數列的求和公式:sn = (a1+an)*(n-1)/2。得到插入排序最壞的時間複雜度為o(n^2)

3.2優化後:

對於n個元素的陣列而言,逐個對比陣列元素尋找合適位置的時間複雜度最壞為o(n),而使用二分查詢演算法尋找合適位置的時間複雜度最壞為o(log(n))。因此,時間複雜度較優化前有很大的效能提公升。

演算法優化前後,都需要個位數以內的臨時變數,因此空間複雜度為o(1)。

排序演算法 三 直接插入排序

直接插入排序,是將乙個資料插入到已排好的有序表中,從而得到乙個新的 記錄數量增1的有序表。將資料集合中的資料依次插入到有序表中,將資料集合變為2個資料有序 3個資料有序,依次變為整個集合有序。直接插入排序時間複雜度o n 2 直接插入排序的效能比氣泡排序和簡單選擇排序要略好 待排序演算法寫完後,會有...

排序演算法 直接插入排序

思想 每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序。第一趟比較前兩個數,然後把第二個數按大小插入到有序表中 第二趟把第三個資料與前兩個數從前向後掃瞄,把第三個數按大小插入到有序表中 依次進行下去,進行了 n 1 趟掃瞄以後就完成了整個排序過程。演算法複雜度 如果目標是把...

排序演算法 直接插入排序

說到排序演算法,我們常用的也就7種,即 直接插入排序,希爾排序,簡單選擇排序,堆排序,氣泡排序,快速排序,歸併排序。下面我將依次詳細地介紹這幾種排序演算法。1 直接插入排序 插入,即表示將乙個新的資料插入到乙個有序陣列中,並繼續保持有序。例如有乙個長度為n的無序陣列,進行n 1次的插入即能完成排序 ...