常見的排序演算法之插入排序

2021-08-28 00:09:00 字數 1272 閱讀 3107

排序演算法是在資料結構中十分常見的操作,每種排序演算法都有不同的特點,接下來我們學習以下常用的排序演算法--插入排序。

插入排序可以分為直接插入排序和希爾排序。

當插入第i(i>1)個元素時,前面的array[0],array[1]...array[i-1]已經排好序,此時用array[i]的排序碼與array[i-1],...的排序碼順序進行比較,找到插入位置即將array[i]插入,原來位置上的元素順序後移。

舉個例子:

實現直接插入排序我們可以用兩種方法:從後往前順序插入或二分插入

**入下:

//直接插入排序(從後往前順序找)

//可以做到穩定

//時間複雜度:最壞(o(n^2)),平均(o(n^2)),最好(o(n))

void insertsort(int array, int size)

else

} //要排序的數插入到正確位置上

array[j+1] = key; }}

//直接插入排序(二分查詢)

//可以做到穩定

//時間複雜度:最優情況:o(n) 平均情況:o(n^2) 最差情況:o(n^2)

void insertsortbinary(int array, int size)

array[left] = key;

}}

希爾排序與直接插入排序的原理一樣,只不過希爾排序是先進行分組,將組內的資料進行排序,最後當只有一組時,就進行直接插入排序。舉個例子:

**如下:

//希爾排序

//不穩定

//時間複雜度 o(n^1,2~1.3)

void shellsort(int array, int size)

else

}array[j+gap] = key;

}} if(gap == 1)}}

直接插入排序的兩種方法時間複雜度不一樣,適用於不同的場合, 可以根據自身的需要選擇要用的演算法。

常見排序演算法之插入排序

目錄 一 簡介 二 排序思路 三 演算法實現 四 原理分析 插入排序,就是假定乙個參考值,假設該參考值左邊的元素都有序,那麼從該元素開始從後往前挨個查詢,如果找到比參考值大的數,那麼就將這個大的數後移,如果未找到比參考值大的數,說明不用移動元素。迴圈比較,經過比較後移之後就會空出乙個位置,用於存放這...

常見排序演算法之插入排序

把陣列分為有序部分與無序部分,當乙個陣列排序時,第 0 位置上為有序部分,其餘部分為無序部分,詳細見下面 然後讓無序部分插敘有序部分,先讓有序部分最後乙個與無序部分第乙個比較,如果條件滿足 大,或者小 就交換位置,然後依次與有序部分倒數第二個繼續比較,直到不需要交換位置。這樣組成了新的有序部分與部分...

常見排序演算法 插入排序

插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。本節介紹兩種插入排序方法 直接插入排序和希爾排序。直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r ...