算法系列01----插入排序

插入排序法

1.工作原理(算法思路)

新建一個指針,指針左邊的所有元素都是有序的。但是他們的位置並不是最終位置,一個指針從左向右掃描,若指針所在處的元素比左邊元素小,則將該元素向前浮動至適當位置,使指針左側元素仍然保持有序。當指針掃描到整個數組元素的末尾時,數組排序完成。

2.動圖演示

插入排序法動圖

3.C#代碼實現

根據原理設計算法:

  class Program
{
    //插入排序法
    public static void insertSort(int[] array)
    {
        //for循環:i作爲指針,進行從左到右掃描數據的工作
        //指針i從1開始掃描,因爲i=0時指針左側無元素
        for (int i = 1; i < array.Length; i++)
        {
            //temp作爲指針鍵值
            int temp = array[i];

            //新建變量j,從i開始向左掃描已經有序的元素,並與temp比較
            //若temp小於掃描元素,則將j指針元素向右移位騰出空間
            int j = i;
            while (j > 0 && array[j - 1] > temp)
            {
                array[j] = array[j - 1];
                j--;
            }
            //循環完成後將temp放在j指針位置,完成本次插入
            array[j] = temp;
        }

    }

    //打印數組
    public static void printArray(int[] array)
    {
        foreach (int item in array)
        {
            Console.Write(item + "\t");
        }
        Console.WriteLine();
    }

    //主函數入口
    static void Main(string[] args)
    {
        int[] array = new int[10] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
        printArray(array);
        insertSort(array);
        printArray(array);
        Console.ReadKey();

    }
}
摺疊

輸出結果:
插入排序法輸出結果

4.性能分析

1)複雜度
插入排序法複雜度

2)插入排序法特點

  • 在數組元素規模較小的時候,插入排序法的運行效率很高。其經常用在一些其他排序方法中(比如歸併排序以及快速排序)來對排序進行優化。
  • 不同於選擇排序法,當一個數組幾乎有序的時候,插入排序法所需要的時間要比其他的排序法快得多。因此插入排序法的排序時間取決於數組元素的初始順序,在最好的情況下,插入排序法運行時間能達到線性級別。
 
分類: 算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章