#include <stdio.h>
int arrarorg[] = { 49,38,65,97,76,
13,27,49,55,4 };
//建立最大堆
//n表示数组的元素位置,length表示数组长度
void maxheap(int h[], int n, int length) {
int l = 2 * n + 1;
//从数组0开始,和从1开始的左右孩子标志
int r = 2 * n + 2;
int max;//l,r,max都是数组角标
int temp;
if (l<length && h[l]>h[n])
max = l;//表示左节点大
else
max = n;//根大
if (r<length && h[r]>h[max])
max = r;
if (max != n) {
temp = h[n];
h[n] = h[max];
h[max] = temp;
maxheap(h, max, length);
}
}
void heapsort(int h[], int length) {
int i, temp;
for (i = length / 2;i >= 0;i--) {
maxheap(h, i, length);
}
for (i = length - 1;i >= 0;i--) {
temp = h[0];
h[0] = h[i];
h[i] = temp;
maxheap(h, 0, i - 1);
}
}
int main(void) {
heapsort(arrarorg, 10);
for (int i = 0;i < 10;i++) {
printf("%d ", arrarorg[i]);
}
getchar();
return 0;
}
堆排序的实现
最新推荐文章于 2024-09-16 18:31:59 发布