排序(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);