插入排序

来源:互联网 发布:h3c网络图标 编辑:程序博客网 时间:2024/06/10 06:46

插入排序

插入排序跟冒泡排序有些相似,所以有些人在使用的时候经常会混淆。

就我个人而言,区分插入排序和冒泡排序最快的方法就是:冒泡排序直到算法结束后,才知道排序完成。而插入排序则不同,外循环每增加1,就能够知道前n个数是排序好的。所以同样的无序数组,使用插入排序比较数的次数会比冒泡排序少许多。

插入排序从i=1开始,直到i<n结束(数组array[n],array[0]是第一项,array[1]是第二项),当存在array[i-1]>array[i]时,交换两者的顺序。不过由于交换的原因,可能会造成左侧已经排序好的数组再次出现无序情况,因此要继续比较,直到前i项的数组都已排序好。

public class Test{    private static void InsertionSort(int[] array)      {           for (int i = 1; i < array.Length; i++)          {            if (array[i - 1] > array[i])            {                int temp = array[i];                array[i] = array[i - 1];                int j = i - 1;                while (j > 0 && array[j - 1] > temp)                {                    array[j] = array[j - 1];                    j--;                }                array[j] = temp;            }        }    }public static void Main(){    int[] a = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };    Console.Write("before: ");    for (int i = 0; i < a.Length; i++)                  Console.Write(a[i] + " ");            Console.WriteLine("");            InsertionSort(a);            Console.Write("after: ");            for (int i = 0; i < a.Length; i++)                  Console.Write(a[i] + " "); }}