📄 heapsorter.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
namespace IAXK.Sys
{
/// <summary>
/// 堆排序器
/// </summary>
/// <typeparam name="T"></typeparam>
[Serializable]
public class HeapSorter<T>:Sorter<T> where T:IComparable,IComparable<T>
{
/// <summary>
/// 创建堆
/// </summary>
/// <param name="v"></param>
/// <param name="l"></param>
/// <param name="r"></param>
/// <param name="ot"></param>
private void BuildHeap(T[] v, int l, int r,OrderType ot)
{
int j, jold;
T a = v[l];
jold = l;
j = 2 * l + 1;
while (j <= r)
{
if ((j < r) && (CompareValue(v[j], v[j + 1], ot) < 0)) j++;
if (CompareValue(a, v[j], ot) >= 0) break;
v[jold] = v[j];
jold = j;
j = 2 * j + 1;
}
v[jold] = a;
}
/// <summary>
/// 排序算法
/// </summary>
/// <param name="v"></param>
/// <param name="ot"></param>
protected override void Algorithm(T[] v, OrderType ot)
{
int n = v.Length;
for (int i = n / 2 - 1; i >= 0; i--)
BuildHeap(v, i, n - 1,ot);
for (int i = n - 1; i > 0; i--)
{
Swap(ref v[0],ref v[i]);
BuildHeap(v, 0, i - 1,ot);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -