您的位置:首页 > 其它

堆排序

2013-04-07 00:00 176 查看
1 #include <stdio.h>

2 #include <string.h>

3 #include <math.h>

4

5 const int HEAP_SIZE = 13;

6

7 int parent(int i)

8 {

9 if (0 == i)

10 return 0;

11

12 return (int)(floor(i - 1)/2);

13 }

14

15 int left(int i)

16 {

17 return (2*i + 1);

18 }

19

20 int right(int i)

21 {

22 return (2*i + 2);

23 }

24

25 void Max_Heapify(int list[], int i, int heap_size)

26 {

27 int l = left(i);

28 int r = right(i);

29 int largest = -1;

30

31 if (l < heap_size)

32 {

33 if (list[i] > list[l])

34 largest = i;

35 else

36 largest = l;

37 }

38

39 if (r < heap_size)

40 {

41 if (list[largest] < list[r])

42 largest = r;

43 }

44

45 if (largest != -1 && largest != i)

46 {

47 int tmp = list[i];

48 list[i] = list[largest];

49 list[largest] = tmp;

50 Max_Heapify(list,largest,heap_size);

51 }

52 }
53
54 void Build_Max_Heap(int list[])
55 {
56 int i;
57 for(i = (HEAP_SIZE-2)/2; i >= 0; i--)
58 Max_Heapify(list,i,HEAP_SIZE);
59 }
60
61 void print(int list[])
62 {
63 int i;
64 for(i = 0; i < HEAP_SIZE; i++)
65 printf("%d ",list[i]);
66 printf("\n");
67 }
68
69 void HeapSort(int list[], int heap_size)
70 {
71 Build_Max_Heap(list);
72 int i;
73 for(i = heap_size - 1; i >=0; i--)
74 {
75 int tmp = list[i];
76 list[i] = list[0];
77 list[0] = tmp;
78 Max_Heapify(list,0,i);
79 }
80 }
81
82
83 int main()
84 {
85 int list[] = {5,7,9,8,4,100,1,0,6,4,6,19,3};
86 HeapSort(list,HEAP_SIZE);
87 print(list);
88 return 0;
89 }

build:

gcc -o heapsort heapsort.c -lm

run:

time ./heapsort

result:

0 1 3 4 4 5 6 6 7 8 9 19 100

real 0m0.002s
user 0m0.000s
sys 0m0.002s
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序 sort heapsort