#include<stdio.h>
#define MAXSIZE 100
typedef int Datatype;
typedef struct
{
int key;
Datatype Other;
}Node;
typedef struct
{
Node r[MAXSIZE + 1];
int Length;
}RecordList;
void HeapAdjust(RecordList *L, int s, int m)
{//假设s..m的序列中,除s外,其它的项都符合堆的定义,对s这个元素进行调整
int i;
Node t;
t = L->r[s];
for (i = 2 * s; i <= m; i *= 2)
{
if (i<m&&L->r[i].key > L->r[i + 1].key) i++;
if (t.key <= L->r[i].key) break;
L->r[s] = L->r[i];
s = i;
}
L->r[s] =t;
}
//建立初始堆
void CreateHeap(RecordList *L)
{
int i;
for (i = L->Length / 2; i>=1; i--)
HeapAdjust(L, i, L->Length);
}
void HeapSort(RecordList *L)
{
CreateHeap(L);
for (int i = L->Length; i >= 2; i--)
{
L->r[0] = L->r[1];
L->r[1] = L->r[i];
L->r[i] = L->r[0];
HeapAdjust(L, 1, i-1);
}
}
int main()
{
int i;
RecordList L;
printf("请输入元素个数:\n");
scanf("%d", &L.Length);
for (i = 1; i <= L.Length; i++)
{
printf("请输入第%d个元素:\n", i);
scanf("%d", &L.r[i].key);
}
HeapSort(&L);
for (i = 1; i <= L.Length; i++)
{
printf("%d\t", L.r[i].key);
}
}
堆排序的实现代码(C语言)
于 2019-02-05 12:49:57 首次发布