二、归并排序
归并排序
归并排序本质上将一个无序元素集分割成许多包含一个元素的集,然后不断的将这些集进行合并,直到一个大的有序集生成。
归并排序的工作原理是可预测的,它的时间复杂度是O(nlgn),因为归并排序需要额外的存储空间,所有必须要有两倍于要排序数据的空间来处理数据
一下是参考《算法精解C语言描述》改写的C#代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace algorithm20150715 { class Program { public static void merge(int[] array, int beg, int mid, int end) { int[] m = new int[array.Length]; int ipos = beg; int jpos = mid + 1; int mpos = 0; while (ipos <= mid || jpos <= end) { if (ipos > mid) { while (jpos <= end) { m[mpos] = array[jpos]; jpos++; mpos++; } continue; } else if (jpos > end) { while (ipos <= mid) { m[mpos] = array[ipos]; ipos++; mpos++; } continue; } if (array[ipos] <= array[jpos]) { m[mpos] = array[ipos]; ipos++; mpos++; } else { m[mpos] = array[jpos]; jpos++; mpos++; } } for (int i = beg; i <= end; i++) { array[i] = m[i - beg]; } } public static void MegSort(int[] array, int beg, int end) { if (beg < end) { int mid = (end - beg) / 2 + beg; MegSort(array, beg, mid); MegSort(array, mid + 1, end); merge(array, beg, mid, end); } } static void Main(string[] args) { int[] array = new int[16] { 9, 2, 3, 4, 4, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 0 }; MegSort(array, 0, 15); foreach (int i in array) { Console.WriteLine(i); } } } }
以上代码仅供记录和参考。
浙公网安备 33010602011771号