#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define swap(a, b) ({\
__typeof(a) c = a;\
a = b, b = c;\
})
int down_updata (int *p, int i, int n) {
int temp = i;
while ((i << 1) <= n) {
p[i] < p[(i << 1)] && (temp = i << 1);
(i << 1 | 1) <= n && p[(i << 1 | 1)] > p[temp] && (temp = (i << 1 | 1));
if (temp == i) break;
swap(p[i], p[temp]);
i = temp;
}
return 0;
}
void output(int *p, int n) {
for (int i = 0; i < n; i++) printf("%d, ", p[i]);
printf("\n");
return ;
}
int heap_sort(int *p, int n) {
p -= 1;
for (int i = n >> 1; i > 0; i--) down_updata(p, i, n);
for (int i = n; i > 1; i--) {
swap(p[i], p[1]);
down_updata(p, 1, i - 1);
}
return 1;
}
int main() {
srand(time(0));
#define MAX_N 20
int temp = 1, *ar = (int *)malloc(sizeof(int) * (MAX_N + 1));
for (int i = 0; i < MAX_N; i++) ar[i] = rand() % 100;
output(ar, MAX_N);
heap_sort(ar, MAX_N);
output(ar, MAX_N);
#undef MAX_N
return 0;
}
线行建堆, 堆,堆排序,
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
记一次JVM堆外内存泄漏问题
一次由JVM堆外内存泄漏引发的POD重启问题的解决之路。
JVM 内存泄漏 堆外内存 POD重启 -
堆以及堆的应用--堆排序
堆以及堆的应用-堆排序、TopK问题。
小根堆 堆 堆排序 大根堆 数据结构 -
堆操作及堆排序
文章目录堆操作堆排序堆操作def heap_insert(lis,index): while lis[i
算法 排序算法 大根堆 堆排序 数组