演算法過程:
序列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處。
publicvoid 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。
publicvoid 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 ...