
归并排序(Merge Sort)
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
示例
public class Program { public static void Main(string[] args) { int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 }; MergeSort(array, 0, array.Length - 1); ShowSord(array); Console.ReadKey(); } private static void ShowSord(int[] array) { foreach (var num in array) { Console.Write($"{num} "); } Console.WriteLine(); } public static void MergeSort(int[] array, int low, int high) { if (low < high) { int mid = (low + high) / 2; MergeSort(array, low, mid); MergeSort(array, mid + 1, high); Merge(array, low, mid, high); } } private static void Merge(int[] array, int low, int mid, int high) { int[] mergeArr = new int[high - low + 1]; int left = low; int right = mid + 1; int merge = 0; while (left <= mid && right <= high) { if (array[left] <= array[right]) { mergeArr[merge++] = array[left++]; } else { mergeArr[merge++] = array[right++]; } } while (left <= mid) { mergeArr[merge++] = array[left++]; } while (right <= high) { mergeArr[merge++] = array[right++]; } merge = 0; while (low <= high) { array[low++] = mergeArr[merge++]; } } }
以上是归并排序算法的一种实现,以下是这个案例的输出结果:
8 11 21 28 32 43 48 56 69 72 80 94
分析
归并排序算法的时间复杂度不难证明为: 。
AlgorithmMan

AlgorithmMan by Iori,AlgorithmMan是使用C#开发的一套用于算法演示的工具。
GitHub下载地址:https://github.com/byteflying/AlgorithmManRelease
Dark Mode

本文由 .Net中文网 原创发布,欢迎大家踊跃转载。
转载请注明本文地址:https://www.byteflying.com/archives/683。
评论列表(1条)
[…] 原文链接:https://www.byteflying.com/archives/683 […]