#include<stdio.h>
void HeapAdjust(int a[], int k, int len) {
a[0] = a[k];
for (int i = 2 * k; i <= len; i *= 2) {
if (i < len && a[i] < a[i + 1])
i++;
if (a[0] >= a[i]) break;
else {
a[k] = a[i];
k = i;
}
}
a[k] = a[0];
}
void Build_Max_Heap(int a[], int len) {
for (int i = len / 2; i > 0; i--)
HeapAdjust(a, i, len);
}
void Heap_Sort(int a[], int len) {
Build_Max_Heap(a, len);
for (int i = len; i > 1; i--) {
int temp = a[1];
a[1] = a[i];
a[i] = temp;
HeapAdjust(a, 1, i-1);
}
}
void main() {
int a[8];
for (int i = 1; i < 8; i++) {
a[i] = i;
printf("%d\n", a[i]);
}
printf("===========\n");
int len = sizeof(a) / sizeof(a[1]) - 1;
Build_Max_Heap(a, len);
for (int i = 1; i < 8; i++)
printf("%d\n", a[i]);
printf("===========\n");
Heap_Sort(a, len);
for (int i = 1; i < 8; i++)
printf("%d\n", a[i]);
}
堆排序(C语言实现)
最新推荐文章于 2022-08-21 21:58:06 发布