using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 堆积排序法
{
class Program
{
static int[] data = { 0, 5, 6, 4, 8, 3, 2, 7, 1 };
static void Main(string[] args)
{
int size = 9;
Console.Write("初始数组:");
for (int i = 1; i < size; i++)
{
Console.Write("["+data[i]+"] ");
}
Heap(data, size);//建立堆积树
Console.Write("\n排序结果:");
for (int i = 1; i < size; i++)
{
Console.Write("["+data[i]+"] ");
}
Console.WriteLine();
Console.ReadKey();
}
public static void Heap(int[] data,int size)
{
int i, j, tmp;
for ( i =(size/2);i>0; i--)//建立堆积树节点
{
Ad_heap(data, i, size - 1);
}
Console.Write("\n堆积内容:");
for ( i = 1; i < size; i++)//原始堆积树内容
{
Console.Write("["+data[i]+"] ");
}
Console.WriteLine();
for ( i = size-2; i>0 ; i--)//堆积排序
{
tmp = data[i + 1];
data[i + 1] = data[1];
data[1] = tmp;
Ad_heap(data, 1, i);//处理剩余节点
Console.Write("\n处理过程:");
for (j = 1; j < size; j++)
{
Console.Write("["+data[j]+"] ");
}
}
}
public static void Ad_heap(int [] data, int i, int size)
{
int j, tmp, post;
j = 2 * i;
tmp = data[i];
post = 0;
while (j<=size&&post==0)
{
if (j<size)
{
if (data[j]<data[j+1])//找出最大节点
{
j++;
}
}
if (tmp>=data[j])//若树根较大,结束比较过程
{
post = 1;
}
else
{
data[j / 2] = data[j];//若树根较小,则继续比较
j = 2 * j;
}
data[j / 2] = tmp;//指定树根为父节点
}
}
}
}
堆积排序法 C#
最新推荐文章于 2025-05-12 08:49:58 发布