跪求,数据结构堆排序的完整代码?严蔚敏版本的。要求用书上的算法实现,c语言版本的。
发布网友
发布时间:2022-06-13 02:25
我来回答
共2个回答
热心网友
时间:2022-06-13 03:54
哥们,这是严蔚敏的数据结构书上的堆排序算法,代码如下,试一下吧
堆排序heapsort(第26行至37行)首先调用建堆函数buildheap,将n个待排序记录建立一个初始堆,然后重复执行n-1次元素交换(第32行至34行)和siftdown进行堆排序。init和print函数与图8.1相同。为节约篇幅,只给出其函数原型,略去其实现。
1#include <stdlib.h>
2#define N 8
3int a[N];
4void init()
5void print()
6int siftdown(int i,int n)
7{
8int t;
9int j = 2*i + 1;
10while (j < n) {
11if ((j < (n-1)) && (a[j] < a[j+1])) j++;
12if (a[i] >= a[j]) return 0;
13t = a[i];
14a[i] = a[j];
15a[j] = t;
16i = j;
17j = 2*i + 1;
18}
19}
20void buildheap(int n)
21{
22int i;
23for (i = n/2-1;i >= 0;i--)
24siftdown(i,n);
25}
26void heapsort(int n)
27{
28int i,t,j;
29buildheap(n);
30for (i = 0;i < n;i++) {
31print(N);
32t = a[0];
33a[0] = a[n-i-1];
34a[n-i-1] = t;
35siftdown(0,n-i-1);
36}
37}
38void main()
39{
40init(N);
41print(N);
42heapsort(N);
43print(N);
44}
热心网友
时间:2022-06-13 05:12
堆排序算法还有很多版本吗?堆排序不就是用堆实现排序么。。