using System;
namespace Algorithm
{
internal class Program
{
public static void Main(string[] args)
{
int[] ints = {50, 10, 90, 30, 70, 40, 80, 60, 20};
MeapSort(ints);
foreach (var i in ints)
{
Console.WriteLine(i);
}
}
public static void MeapSort(int[] ints)
{
for (int i = ints.Length / 2; i >= 1; i--)
{
SwapTriangle(ints, i,ints.Length);
}
for (int i = ints.Length; i > 1; i--)
{
int temp = ints[0];
ints[0] = ints[i - 1];
ints[i - 1] = temp;
SwapTriangle(ints, 1,i-1);
}
}
//對數組ints到Maxlenth長度,在nodeNumber位置進行比較排列
private static void SwapTriangle(int[] ints, int nodeNumer,int MaxLenth)
{
int maxNodeNumber = nodeNumer;
if (nodeNumer * 2 > MaxLenth) return;
if (ints[maxNodeNumber - 1] < ints[nodeNumer * 2 - 1])
{
maxNodeNumber = nodeNumer * 2;
}
if (nodeNumer * 2 + 1 > MaxLenth) goto judge;
if (ints[maxNodeNumber - 1] < ints[nodeNumer * 2])
{
maxNodeNumber = nodeNumer * 2 + 1;
}
judge:
if (maxNodeNumber != nodeNumer)
{
int temp = ints[nodeNumer - 1];
ints[nodeNumer - 1] = ints[maxNodeNumber - 1];
ints[maxNodeNumber - 1] = temp;
SwapTriangle(ints, maxNodeNumber,MaxLenth);
}
}
}
}