shell 希爾 排序和插入排序簡介

2021-08-10 05:34:41 字數 797 閱讀 9661

插入排序 :

考慮這樣一種情況: 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序.

插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o(n^2)。是穩定的排序方法。插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後乙個元素除外(讓陣列多乙個空間才有插入的位置),而第二部分就只包含這乙個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。

比如數列

我們首先設增量為5(n/2=5)(n為數列長度), 故將原數列中第i位和第i+5位進行插入排序

初步排序結果為。然後再將增量逐漸減小,進行5/2=2的分塊,即,,排序得,最終進行2/2=1分塊,即對上數列直接進行插入排序得到最終序列。

摘自其他文章:shell排序的執行時間依賴於增量序列。

好的增量序列的共同特徵:

① 最後乙個增量必須為1;

② 應該盡量避免序列中的值(尤其是相鄰的值)互為倍數的情況。

有人通過大量的實驗,給出了目前較好的結果:當n較大時,比較和移動的次數約在n到1.6n之間。

插入排序和希爾 Shell 排序

插入排序 陣列前k 1個元素已經有序,如何確定第k個元素的插入位置,使得這k個元素有序。方法1 從左到右掃瞄掃瞄這個有序子陣列,直到遇到第乙個大於等於a k 的元素,然後把a k 插在這個元素的前面。方法2 從右到左掃瞄這個有序子陣列,直到遇到第乙個小於等於a k 的元素,然後把a k 插在這個元素...

插入排序和希爾 Shell 排序

插入排序 陣列前k 1個元素已經有序,如何確定第k個元素的插入位置,使得這k個元素有序。方法1 從左到右掃瞄掃瞄這個有序子陣列,直到遇到第乙個大於等於a k 的元素,然後把a k 插在這個元素的前面。方法2 從右到左掃瞄這個有序子陣列,直到遇到第乙個小於等於a k 的元素,然後把a k 插在這個元素...

插入排序之希爾(shell)排序

希爾排序是1959 年由d.l.shell 提出來的,相對直接排序有較大的改進。希爾排序又叫縮小增量排序。基本思想 選擇乙個 增量序列 t1,t2,ti tj,tk,其中ti tj,tk 1 按增量序列個數k,對序列進行k 趟排序 每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m 的子串行...