堆排序
堆排序是指利用堆积树这种数据结构所设计的一种排序算法,它是选择排序的一种。
可以利用数组的特点快速定位指定索引的元素。
以下代码是一个简单堆排序算法,功能是排序一个整数数组,用C#实现:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HeapSort { class Program { private static void HeapDown(int[] arr, int pos, int size) { int LChild = 2 * pos + 1; int RChild = 2 * pos + 2; int max = pos; if (pos < size / 2) { if (LChild < size && arr[LChild] > arr[max]) { max = LChild; } if (RChild < size && arr[RChild] > arr[max]) { max = RChild; } if (max != pos) { int tmp = arr[pos]; arr[pos] = arr[max]; arr[max] = tmp; HeapDown(arr, max, size); } } } private static void BuildHeap(int[] arr) { int size = arr.Length; for (int i = size / 2 - 1; i >= 0; i--) { HeapDown(arr, i, size); } } public static void HeapSort(int[] arr, int size) { BuildHeap(arr); for (int i = 0; i < arr.Length; i++) { int tmp = arr[0]; arr[0] = arr[arr.Length - 1 - i]; arr[arr.Length - 1 - i] = tmp; HeapDown(arr, 0, size - 1 - i); } } static void Main(string[] args) { int[] arr = new int[11] { 7, 4, 3, 2, 1, 11, 1, 6, 7, 12, 3 }; //BuildHeap(arr); HeapSort(arr, 11); foreach (int i in arr) { Console.WriteLine(i); } Console.ReadKey(); } } }
时间: 2024-10-08 16:25:23