
堆排序(Heap Sort)
堆排序是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的升序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。
示例
public class Program { public static void Main(string[] args) { int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 }; HeapSort(array); ShowSord(array); Console.ReadKey(); } private static void ShowSord(int[] array) { foreach (var num in array) { Console.Write($"{num} "); } Console.WriteLine(); } private static void HeapSort(int[] array) { MaxHeap(array); for (int i = array.Length - 1; i > 0; i--) { Swap(ref array[0], ref array[i]); Heapify(array, 0, i); } } private static void MaxHeap(int[] array) { for (int i = array.Length / 2 - 1; i >= 0; i--) { Heapify(array, i, array.Length); } } private static void Heapify(int[] array, int index, int size) { int left = 2 * index + 1; int right = 2 * index + 2; int large = index; if (left < size && array[left] > array[large]) { large = left; } if (right < size && array[right] > array[large]) { large = right; } if (index != large) { Swap(ref array[index], ref array[large]); Heapify(array, large, size); } } private static void Swap(ref int first, ref int second) { int t = first; first = second; second = t; } }
以上是堆排序算法的一种实现,以下是这个案例的输出结果:
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/685。
评论列表(1条)
[…] 原文链接:https://www.byteflying.com/archives/685 […]