我們將陣列中的資料分為兩個區間,已排序區間和未排序區間。初始已排序區間只有乙個元素,就是陣列的第乙個元素,然後在未排序區間中依次取出元素並插入到已排序區間的合適位置,並保證已排序區間一直是有序。重複這個步驟直到未排序區間元素為空,演算法結束
插入排序步驟:
對於插入排序有兩種排序演算法:
首先來看直接插入:
對於插入排序最優的結果就是排序區間剛好有序,並且是我們想要的順序。那麼時間複雜度是o(n), 但是最壞的情況就是排序區間的順序剛好不是我們想要的順序。那麼時間複雜度就是o(n^2).
void
insertsort
(int
* a,
int n )
else
} a[end+1]
= tmp;
}}
時間複雜度:o(n^2)
空間複雜度: o(1)
由於插入排序的性質, 乙個陣列越接近我們想要的順序,插入的越快,那麼我們就可以對陣列進行預排序的處理。
希爾排序的處理方式也叫縮小增量法。
具體做法:
我們將乙個陣列以gap(乙個數字)分組進行預排序,具體**如下所示。
void
shellsort
(int
* a,
int n)
else
} a[end + gap]
= tmp;}}
}
時間複雜度:o(n^1.3)
空間複雜度: o(1)
插入排序(直接插入排序 希爾排序)
直接插入排序 基本思想 假設待排序的數存放在陣列arr 1.n 中。初始時,arr 1 自成1個有序區,無序區為arr 2.n 從i 2起直至i n為止,依次將arr i 插入當前的有序區arr 1.i 1 中,生成含n個記錄的有序區。演算法複雜度 對於具有n個記錄的檔案,要進行n 1次排序 各種狀...
插入排序 直接插入排序 希爾排序
1.直接插入排序 兩個陣列,有序陣列和無序陣列。排序前 無序陣列裡面所有的值都是無序的,有序陣列沒有值 排序中 無序陣列中拿出乙個數,放到有序陣列當中,有序陣列拿到數,將其按照大小有序的插入到無序陣列中 排序後 無序陣列中沒有數,有序陣列中的數為有序的。假設有一組無序序列 r0,r1,rn 1。1 ...
插入排序 直接插入排序 希爾排序
一 直接插入排序 1.思想 直接排序法,可以分為兩個部分,一部分是有序的,一部分是無序的.從這個圖上,應該是能看清楚直接插入排序的思想了.將無序部分的第乙個與有序部分進行比較.從有序部分的後面向前面比較,然後不斷地挪動有序部分的資料的位置 static void insertsort listlis...