排序(Sort)是計算機程序設計中的一種重要操做,也是平常生活中常常遇到的問題。例如,字典中的單詞是以字母的順序排列,不然,使用起來很是困難。一樣,存儲在計算機中的數據的次序,對於處理這些數據的算法的速度和簡便性而言,也具備很是深遠的意義。算法
排序是把一個記錄(在排序中把數據元素稱爲記錄)集合或序列從新排列成按記錄的某個數據項值遞增(或遞減)的序列。數組
插入排序(direct Insert Sort)的基本思想是:順序地將待排序的記錄按其關鍵碼的大小插入到已排序的記錄子序列的適當位置。子序列的記錄個數從1 開始逐漸增大,當子序列的記錄個數與順序表中的記錄個數相同時排序完畢。 測試
通常來講,插入排序都採用in-place在數組上實現。具體算法描述以下:spa
1 /// <summary> 2 /// 插入排序 3 /// </summary> 4 /// <param name="array"></param> 5 /// <returns></returns> 6 private static int[] InsertSort(int[] array) 7 { 8 for (int i = 1; i < array.Length; i++) 9 { 10 int insertVal = array[i]; 11 int insertIndex = i - 1; 12 while (insertIndex >= 0 && insertVal < array[insertIndex]) 13 { 14 array[insertIndex + 1] = array[insertIndex]; 15 insertIndex--; 16 } 17 array[insertIndex + 1] = insertVal; 18 printArray(array); 19 Console.WriteLine("第" + (i) + "趟"); 20 } 21 return array; 22 }
1 /// <summary> 2 /// 打印數組 3 /// </summary> 4 /// <param name="array"></param> 5 private static void printArray(int[] array) 6 { 7 if (array == null || array.Length <= 0) 8 { 9 return; 10 } 11 for (int i = 0; i < array.Length; i++) 12 { 13 Console.Write("["+array[i]+"]"+","); 14 } 15 }
1 //插入排序 2 int[] arrayTest3 = new int[] { 9, 8, 5, 6, 7, 4, 3, 2, 1 }; 3 Console.WriteLine("\n------------原數組--------------"); 4 printArray(arrayTest3); 5 Console.WriteLine("\n------------插入排序--------------"); 6 int[] resultArray3 = InsertSort(arrayTest3); 7 Console.WriteLine("排序結果:"); 8 printArray(resultArray3);