直接插入排序和希爾排序

2022-08-19 02:36:10 字數 1036 閱讀 5601

演算法過程:

序列s = 是n個可排序的序列,則

(1). 令i從1遞增到n-1,重複步驟(2)-(5).

(2). 將元素si儲存到臨時變數tmp,令j = i-1.

(3). 確定使條件tmp < sj成立的最小j值,前提要保證j >= 0.

(4). 在(3)的過程中依次將子串行後移到.

(5). 將臨時變數tmp放到sj處。

public

void insertsort(int

array)

array[j+1] =tmp;

}}

直接插入排序演算法複雜度:

時間複雜度:無序 o(n2),反序o(n2),正序o(n)

空間複雜度:o(1)

直接插入排序是穩定的排序方法。

下面介紹希爾排序,希爾排序是直接插入排序的擴充套件,即把資料長度由1變成len/2。

演算法過程:

(1). 先取乙個小於n的資料長度間隔datalen,不防令datalen=len(array)/2.

(2). 當datalen不等於0時,重複步驟(3)-(8).

(3). 令i從datalen遞增到n-1,重複步驟(4)-(7).

(4). 將元素si儲存到臨時變數tmp,令j = i - datalen.

(5). 確定使條件tmp < sj成立的最小j值,前提要保證j >= 0。注意j 以datalen遞減,而不是1.

(6). 在(5)的過程中依次將子串行後移到.

(7). 將臨時便令tmp放到sj處.

(8). 重置datalen=len(array)/2。

public

void shellsort(int

array)

array[j + datalen] =tmp;

}datalen = datalen/2;

}}

希爾排序演算法複雜度分析:

希爾排序執行時間取決於資料長度間隔datalen,時間效能優於直接插入排序,是一種不穩定的排序方法。

直接插入排序和希爾排序

if defined insertsort h define insertsort h include define maxsize 100 typedef int keytype 關鍵字型別用來比較 typedef char infotype 其他型別的資訊 typedef structrecty...

直接插入排序和希爾排序

一 插入排序 在一組無序的陣列中,假設第乙個有序,每一次陣列中剩餘的元素與第乙個比較,然後逐個插入到乙個有序的序列中,直到這個陣列所有的數字有序為止 二 直接插入演算法 演算法思路 1 我們先假設第乙個有序的數字下標為end,2 下乙個要插入的數字 tmp 繼續構成有序就直接插入,此時end向後挪一...

直接插入排序和希爾排序

一 直接插入排序 插入排序 1.1 基本思想和原理 將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,它有兩個作用 進入查詢 插入位置 迴圈之前,它儲存了r i ...