排序算法系列:插入排序算法
概述
直接插入排序(Straight Insertion Sort)的基本操作是將一個記錄插入到已經排好序的有序表中,從而得到一個新的、記錄數增1的有序表。
– 《大話數據結構》
版權說明
著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
本文作者:Q-WHai
發表日期: 2016年3月24日
原文鏈接:https://qwhai.blog.csdn.net/article/details/50968422
來源:CSDN
更多內容:分類 >> 算法與數學
目錄
文章目錄
- 概述
- 版權說明
- 目錄
- @[toc]
- 算法原理分析
- 算法步驟
- 邏輯實現
- 復雜度分析
- Ref
- Github源碼下載
- 征集
- @[toc]
算法原理分析
從上面的概述中我們也就可以知道了,這里對數組進行排序的過程需要兩個序列才能完成。
一個待排序的亂序序列,一個是已排序的有序序列。我們現在要要做的就是把亂序的元素一個一個地從亂序列中插入到有序序列中去。就像下面這樣:
可是,這里還是有一些不太好的地方,比較明顯地方就是我們需要額外添加一個輔助數組。如果這個待排序數據比較大,那么可能添加輔助數組的策略就不能使用了。
這里我們不難想到,在原始數組中,有這樣的一個等式:整體序列 = 有序序列 + 亂序序列
也就是說我們可以把當前序列數組一分為二,左邊為有序,右邊為亂序。
這樣每次從亂序序列中取出第一個元素,從有序列中插入。直到序列整體有序為止。具體的步驟請參見下面的算法步驟。
算法步驟
邏輯實現
/** 排序算法的核心模塊* * @param array* 待排序數組*/private void sortCore(int[] array) {int arraySize = array.length;for (int i = 1; i < arraySize; i++) {int j = i;int waitInsert = array[i];while(j > 0 && waitInsert < array[j - 1]) {array[j] = array[j - 1];j--;}array[j] = waitInsert;}}復雜度分析
| 排序方法 | 時間復雜度 | 空間復雜度 | 穩定性 | 復雜性 | ||
| 平均情況 | 最壞情況 | 最好情況 | ||||
| 插入排序 | O(n2) | O(n2) | O(n) | O(n) | 穩定 | 簡單 |
Ref
- 《大話數據結構》
Github源碼下載
- https://github.com/qwhai/algorithms-sort
征集
如果你也需要使用ProcessOn這款在線繪圖工具,可以使用如下邀請鏈接進行注冊:
https://www.processon.com/i/56205c2ee4b0f6ed10838a6d
總結
以上是生活随笔為你收集整理的排序算法系列:插入排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL多表查询核心优化
- 下一篇: 全排列算法的全面解析