[Data Structure & Algorithm] 插入排序
排序
- 內(部)排序 - 排序時不涉及數據的內、外交換,即整個文件都是放在內存中處理
- 外(部)排序 - 排序時要進行數據的內、外交換
插入排序
直接插入排序 Straight Insertion Sort - 最簡單
- 基本操做
1.比較關鍵字
2.移動記錄
- 具體實現
- 設置監視哨SqList[0] = i(待插入的值)
- 從數組的末尾開始循環,把比i大的值都向後移一位,直到碰上比i小的值,插入i
- 空間上 - 監視哨須要額外空間
- 時間上 - O(n2)
- 最好狀況 - 正序 - 插入第i個值,比較1次,無需移動
- 最壞狀況 - 逆序 - 插入第i個值,比較i次,移動i-1次
- 二者平均獲得該算法的時間複雜度
- 適用於
折半插入排序
- 改進第一步 比較關鍵字
- 時間複雜度 - O(n2)
2路插入排序
- 同時改進第一步(折半查找)和第二步
- 基本思路 - 移動記錄改進
1.把第一個記錄r[1]做爲分界線,將待排序的序列分爲兩部分
2.比r[1]小的,插入到r[1]以前的序列中;比r[1]大的,插入到r[1]後面的序列中
- 空間上 - 須要額外n個空間
- 時間上 - O(n2)
- 最好狀況 - r[1]在待排序列的中間,則能夠減小一半的移動次數
- 最壞狀況 - r[1]是最大或最小值,沒有任何優化
希爾排序 Shell‘s sort - 縮小增量排序 Diminishing increment sort
- 基本思路
1.肯定增量序列,如{1,3,5}
- h1= 1的遞增整數序列
2.從增量序列中的最大值開始,依次對待排序列進行劃分
3.對於劃分出的子序列用直接插入排序,直到最終的增量爲1,獲得完整的有序序列
- 時間複雜度 - 由增量序列決定
歡迎關注本站公眾號,獲取更多信息