堆是一种特殊的二叉树(完全二叉树),一般情况下堆排序是用数组的方式实现的。
核心思想:利用最大堆(最小堆)输出堆顶元素,剩下的元素重新生成最大堆(最小堆),继续输出堆顶元素,重复此过程即可得到有序序列。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 排序
{
class Program
{
public static void Heap_Sort(int[] A,int N)
{
int i;
for (i = N / 2 + 1; i >= 0; i--)
{
New_MaxHeap(A,i,N);
}
for (i = N - 1; i > 0; i--)
{
int t = A[0];
A[0] = A[i];
A[i] = t;
New_MaxHeap(A, 0, i);
}
for (int k = 0; k < N; k++)
{
Console.WriteLine(A[k]);
}
}
public static void New_MaxHeap(int[] A,int p,int N)
{
int parent, child, x;
x = A[p];
for (parent = p; (parent * 2 + 1) <N; parent = child)
{
child = parent * 2 + 1;
if ((child !=N- 1) && (A[child] < A[child+1]))
{
child++;
}
if (x >= A[child])
break;
else
A[parent] = A[child];
}
A[parent] = x;
}
static void Main(string[] args)
{
string[] str = Console.ReadLine().Split ('-');
int[] array = new int[str.Length];
for (int k = 0; k < str.Length; k++)
{
array[k] = Convert.ToInt32(str[k]);
}
Heap_Sort(array,10);
Console.ReadLine();
}
}
}
—————————————————————————————————