標籤:[] 開始 代碼 有序表 com archive pre bsp 依次
直接插入排序(straight insertion sort)的作法是:
每次從無序表中取出第一個元素,把它插入到有序表的合適位置,使有序表仍然有序。
第一趟比較前兩個數,然後把第二個數按大小插入到有序表中; 第二趟把第三個資料與前兩個數從後向前掃描,把第三個數按大小插入到有序表中;依次進行下去,進行了(n-1)趟掃描以後就完成了整個排序過程。
直接插入排序屬於穩定的排序,時間複雜性為o(n^2),空間複雜度為O(1)。
直接插入排序是由兩層嵌套迴圈組成的。外層迴圈標識並決定待比較的數值。內層迴圈為待比較數值確定其最終位置。直接插入排序是將待比較的數值與它的前一個數值進行比較,所以外層迴圈是從第二個數值開始的。當前一數值比待比較數值大的情況下繼續迴圈比較,直到找到比待比較數值小的並將待比較數值置入其後一位置,結束該次迴圈。
值得注意的是,我們必需用一個儲存空間來儲存當前待比較的數值,因為當一趟比較完成時,我們要將待比較數值置入比它小的數值的後一位 插入排序類似玩牌時整理手中紙牌的過程。插入排序的基本方法是:每步將一個待排序的記錄按其關鍵字的大小插到前面已經排序的序列中的適當位置,直到全部記錄插入完畢為止。
- 第一層迴圈是為了依次將數組中的值放入到有序表裡,這裡迴圈是從1開始,第1個元素就是有序表。比如迴圈進到了5,那麼前五個元素就是有序表,後面的就是無序表
- 第二層迴圈是為了形成有序表,第一次外層迴圈,都有一個元素放到有序表中,並形成新的有序表。
C#代碼:(我寫的不是很簡練)
public class SortHelper { public static void InsertSort<T>(T[] array) where T : IComparable { int length = array.Length; for (int i = 1; i < length; i++) { T temp = array[i]; if (temp.CompareTo(array[i - 1])<0) { for (int j = 0; j < i; j++) { if (temp.CompareTo(array[j])<0) { temp = array[j]; array[j] = array[i]; array[i] = temp; } } } } } }
http://www.cnblogs.com/criedshy/archive/2010/05/05/1728070.html
C# 直接插入排序