利用随机函数产生N个随机整数(200以上),对这些数进行由小到大排序。要求:采用堆排序
需要程序与运行结果截图
好了
#include <stdio.h>
#include <stdlib.h>
void heapadjust(int* a, int n, int i) {
int t, c;
for (t = a[i]; 2 * i + 1 < n; i = c) {
c = 2 * i + 1;
if (c < n - 1 && a[c] < a[c + 1])
c++;
if (a[c] > t) {
a[i] = a[c];
a[c] = t;
} else
break;
}
}
void heapsort(int* a, int n) {
int i;
for (i = n / 2 - 1; i >= 0; i--)
heapadjust(a, n, i);
for (i = n - 1; i > 0; --i) {
int t;
t = a[0];
a[0] = a[i];
a[i]= t;
heapadjust(a, i, 0);
}
}
int main() {
int n, i, a[1000];
printf("输入排序个数,小于1000,然后回车\n");
scanf("%d", &n);
printf("随机产生\n");
for (i = 0; i < n; ++i)
a[i] = rand() % 400 + 200;
for (i = 0; i < n; ++i)
printf("%d ", a[i]);
printf("输出\n");
heapsort(a, n);
for (i = 0; i < n; ++i)
printf("%d ", a[i]);
}