1 //HeapSort.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include <iostream>
6
7 using namespace std;
8
9 //此函数为大顶堆调整函数
10 void HeapAdjust(int* arr,int start, int end)
11 {
12 int temp;//用作交换的存储单元,此算法的空间复杂度为此。
13 int j=0;//关键字较大的节点位置
14 temp = arr[start];
15 for(j = start*2 + 1; j <= end; j=(j*2+1))
16 {
17 if(j < end && arr[j] < arr[j+1])
18 {
19 ++j;
20 }
21 if(temp >= arr[j]) break;
22 arr[start] = arr[j];
23 start = j;
24 }
25 arr[start] = temp;
26 }
27 //堆排序函数
28 void HeapSort(int *a,int len)
29 {
30 for(int i =len/2-1; i >= 0; --i )
31 {
32 HeapAdjust(a,i,len-1);
33 }
34 for(int j=len-1; j >= 0; --j)
35 {
36 int tmp = a[0];
37 a[0] = a[j];
38 a[j] = tmp;
39 HeapAdjust(a,0,j-1);
40 }
41 }
42 int _tmain(int argc, _TCHAR* argv[])
43 {
44 int a[20]={-1,23,5456,21,784,12,46,89,21213,687,32,-12,8,0,123,-34,2332,3333,5674,1111};
45 HeapSort(a,20);
46 for(int i=0; i < 20;++i)
47 {
48 cout<<a[i]<<" ";
49 }
50 cout<<endl;
51 return 0;
52 }
53
54