排序學習筆記 1 插入排序

2021-04-22 02:28:49 字數 812 閱讀 1680

學習排序,參考**、測試程式:

表示一下感謝~~

1. 插入排序:

1)直接插入排序

穩定排序,效能:o(n^2);

2)二分查詢插入(折半插入排序)

這個演算法也是非常被大眾使用的,折半、二分已經深入人心了。不過它的資料後移卻給這個演算法拖了後腿。

不過沒關係,我們能夠從中得到解決問題的思想:折半!

穩定排序,效能:o(n*lg(n));

3)shell排序

思想:也叫縮小增量排序。取乙個間隔(gap),將序列分成若干的子串行,對每個子串行進行直插排序;然後逐漸縮小間隔,重複以上過程,直到間隔為1。在開始的時候,每個子串行裡關鍵碼很少,直插的效率很高;隨著間隔的縮小,子串行的關鍵碼越來越多,但是在前面的排序基礎上,關鍵碼已經基本有序,直插的效率依然很高。

換個我自己的說法。k是間隔gap,k的初值一般是size/3+1。第i、i+k、i+2k、i+mk作為一組,進行直插排序;同樣的,i+1、i+1+k、i+1+2k、i+1+mk也是。以k=k/3+1的速度,逐漸縮小k的值,直到k=1,再排一次,結束。

具體實現是3個for迴圈:

for k=size/3+1-->1(++)   //縮小增量

for i=k-->n(++)        //遍歷,一次小排序

for j=mk-->gap(--)   //回溯,或者說,是一次小型的插入排序

不穩定排序,效能:n^1.25-->1.6*n^1.25;

適用範圍:**簡單,大數小數效率都不錯;

Linux C學習筆記 排序演算法1 插入排序

插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃瞄過程中,需要反覆把已排...

排序1 插入排序

讓我們開始排序的學習吧,首先我們先理解一下插入排序的基本思想 每一趟將乙個待排序的記錄,按其關鍵字的大小插入到已經排好序的一組記錄的適當位置上,知道所有待排序記錄全部插入為止。這個可能會和選擇排相似,但是那個是設定最大或最小,然後依次找到最大或最小插入到特定位置,而選擇依次比較後移或前移,不要混淆哦...

排序1 插入排序

排序1 插入排序 以從小到大排序為例 重點關注各種排序時間複雜度,空間複雜度,已經有序的時間空間複雜度,穩定性的對比 1.1原理 舉例說明更清晰 設原資料 5 9 4 7 2 移動後面資料 for int k i 1 k j k 插入資料 arr j tmp 1.3評價 時間複雜度 o n 2 空間...