数据结构:堆排序
利用数据结构堆来辅助排序数组
首先需要了解堆的性质以及实现堆原理以及实现
下面是堆排序代码实现
public void HeapSortFunc(List<int> list)
{
Heap.Heap<int> heap = new Heap.Heap<int>();
heap._list = list;
// 构建堆
heap.HeapCreate();
// 初始尾部元素为末尾元素 int i = list.Count - 1
// 一:每次将堆顶(最大元素)和尾部元素(--i)进行交换
// 二:尾部前边的数据重新构建为堆,再次执行 一、二
// 直到所有元素都执行结束
for (int i = list.Count - 1; i >= 0; --i)
{
// 将堆顶元素与末尾元素进行交换
int temp = list[0];
list[0] = list[i];
list[i] = temp;
// 将新的堆顶元素下虑
heap.PercolateDown(list, 0, i);
}
}
测试代码如下
public void Test()
{
List<int> list = new List<int>() { 4, 6, 8, 5, 9, 3, 1, 0, 20, 10, 16 };
HeapSortFunc(list);
for (int i = 0; i < list.Count; ++i)
{
Console.Write(list[i] + " ");
}
}
排序结果:0 1 3 4 5 6 8 9 10 16 20