插入排序與歸併排序的C#實現

來源:互聯網
上載者:User

標籤:style   blog   http   color   2014   art   

演算法導論在介紹演算法時列舉了插入排序與並歸排序,以此來說明什麼事演算法,演算法效率以及提出了演算法設計中重要的思想--分治,也就是將問題劃分為規模較小的子問題。這種思想在大規模運算時具有顯著的時間開銷優勢,例如插入排序和並歸排序,其時間開銷大致分別等於C1N2和C2Nlog2N。

下面介紹具體的代碼:

首先是插入排序:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5  6 namespace algorithm 7 { 8     class Program 9     {10         class InsertionSortFun11         {12             public void InsertionSort(int[] A)13             {14                 int n = A.Length;15                 for (int j = 1; j < n; j++)                 16                 {17                     //所要插入的新值18                     int key = A[j];                        19                     int i = j - 1;20                     //將新值與原有序列比較21                     while ((i >= 0) && (A[i] > key))        22                     {23                         //交換順序24                         A[i + 1] = A[i];                    25                         i = i - 1;26                     }27                     //插入新值28                     A[i + 1] = key;                         29                 }30             }31         }32         33         static void Main(string[] args)34         {35             //待排序數組36             int[] X = { 45, 32, 87, 1, 8, 0, 4, 2, 55, 6, 34, 23, 82, 12, 8 };37             //執行個體化插入排序38             InsertionSortFun ISF = new InsertionSortFun();39             ISF.InsertionSort(X);40             //控制台列印輸出41             foreach (int item in X)42             {43                 Console.WriteLine(item);44             }45         }46     }47 }

輸出結果為:

 

接下來是歸併排序:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5  6 namespace algorithm 7 { 8     class Program 9     {10         class MergeSortFun11         {12             //合并函數--用於將兩個已排序的數組合并13             private void Merge(int[] num, int start, int middle, int end)14             {15                 int n1 = middle - start + 1;16                 int n2 = end - middle;17 18                 //聲明兩個數組用來容納左右兩個數組19                 int[] L = new int[n1 + 1];20                 int[] R = new int[n2 + 1];21 22                 //為建立的數組賦值23                 for (int i = 0; i < n1; i++) 24                 {25                     L[i] = num[start + i];26                 }27                 for (int i = 0; i < n2; i++)28                 {29                     R[i] = num[middle + i + 1];30                 }31                 //設定哨兵元素32                 L[n1] = 1000000;33                 R[n2] = 1000000;34 35                 int p = 0;36                 int q = 0;37                 //進行合并38                 for (int k = start; k <= end; k++) 39                 {40                     if (L[p] <= R[q]) 41                     {42                         num[k] = L[p];43                         p++;44                     } 45                     else46                     {47                         num[k] = R[q];48                         q++;49                     }50                 }                51             }52 53             //遞迴函式54             public void MergeSort(int[] num, int start, int end)55             {56                 int middle;57                 if (start < end) 58                 {59                     middle = (start + end) / 2;60                     //歸併的基本思想61                     //左排序62                     MergeSort(num, start, middle);63                     //右排序64                     MergeSort(num, middle + 1, end);65                     //合并66                     Merge(num, start, middle, end);67                 }68             }69         }70         static void Main(string[] args)71         {72             //待排序數組73             int[] X = { 45, 32, 87, 1, 8, 0, 4, 2, 55, 6, 34, 23, 82, 12, 8 };74             //執行個體化歸併排序75             MergeSortFun MSF = new MergeSortFun();76             MSF.MergeSort(X, 0, X.Length - 1);77             //控制台列印輸出78             foreach (int item in X)79             {80                 Console.WriteLine(item);81             }82         }83     }84 }

其結果與插入排序結果相同。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.