1 #include <string.h>
2 #include <stdio.h>
3
4 void Swap(int * a, int i, int j)
5 {
6 int temp = a[i];
7 a[i] = a[j];
8 a[j] = temp;
9 }
10
11 void Heapify(int * a, int start, int end)
12 {
13 int index;
14 if (2 * start + 2 <= end) {
15 index = a[2 * start + 1] > a[2 * start + 2] ? (2 * start + 1) : (2 * start + 2);
16 if (a[index] > a[start]) {
17 Swap(a, index, start);
18 Heapify(a, index, end);
19 }
20 } else if (2 * start + 1 == end) {
21 if (a[2 * start + 1] == a[start]) {
22 Swap(a, 2 * start + 1, start);
23 }
24 }
25 }
26
27 void HeapSort(int * a, int n)
28 {
29 int i;
30 for (i = (n - 1) / 2; i >= 0; --i) {
31 Heapify(a, i, n - 1);
32 }
33 for (i = n - 1; i >= 1; --i) {
34 Swap(a, i, 0);
35 Heapify(a, 0, i - 1);
36 }
37 }
38
39 void Print(int * a, int n)
40 {
41 int i;
42 for (i = 0; i < n; ++i) {
43 printf("%3d", a[i]);
44 }
45 printf("\n");
46 }
47
48
49 int main()
50 {
51 int a[10] = {1, 9, 8, 7, 3, 5, 6, 2, 0, 4};
52 Print(a, 10);
53 HeapSort(a, 10);
54 Print(a, 10);
55
56 return 0;
57 }
posted on 2011-10-22 15:21  吃吃户  阅读(173)  评论(0编辑  收藏  举报