[C#] 插入排序法(Insertion Sort)

  • 11588
  • 0

[C#] 插入排序法(Insertion Sort)

Introduction
維基百科 的解釋 :
插入排序(Insertion Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

 

Examples

   1: public static void insertionSort(int[] list)
   2:     {
   3:         // 手上第一張牌與自己無從比較,所以由第二張牌開始比(i=1)
   4:         for (int i = 1; i < list.Length; i++)
   5:         {
   6:             int pivot = list[i];  // 依序抽一張牌
   7:             for (int j = i - 1; j >= 0; j--)
   8:             {      // 和已抽出來的(已排序過的)牌比大小 
   9:                 if (list[j] > pivot)
  10:                 {        // 比較大的牌往右移動一格
  11:                     list[j + 1] = list[j];
  12:                     if (j == 0) list[j] = pivot;  // 如果所有牌都移動了,將已抽出的牌插入
  13:                 }
  14:                 else
  15:                 {        // 如果沒有較大的牌可移動,將已抽出的牌插入
  16:                     list[j + 1] = pivot;
  17:                     break;    // 結束內圈迴路到下一個外圈迴路,抽下張牌
  18:                 }
  19:             }   // 內層迴圈
  20:         }   // 外層迴圈
  21:  
  22:     } 
  23:  
  24:     public static void Main()
  25:     {
  26:         int[] list = new int[12] { 1, 3, 6, 8, 9, 11, 7, 12, 5, 2, 13, 4 };
  27:         Console.WriteLine("Before sort");
  28:         for (int n=0;n<list.Length;n++)
  29:            Console.Write(list[n]+" ");
  30:         insertionSort(list);
  31:         Console.WriteLine("\nAfter sort");
  32:         for (int n = 0; n < list.Length; n++)
  33:             Console.Write(list[n] + " ");
  34:  
  35:         Console.ReadKey();
  36:     }

 

 

執行結果

2010-04-29_014215

三小俠  小弟獻醜,歡迎指教