學習排序,參考**、測試程式:
表示一下感謝~~
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 空間...