您的位置:首页 > 理论基础 > 数据结构算法

数据结构-堆排序

2014-04-26 18:33 225 查看
#include <iostream>

using namespace std;

void Sort(int* a,int num,int n){
int c = 2 * num + 1;

while(c+1 < n){
if(a[c+1] > a[c]){
c++;
}
if(a[c] > a[num]){
int tmp = a[c];
a[c] = a[num];
a[num] = tmp;
num = c;
c = 2 * num + 1;
}
else{
break;
}
}
if(c+1 == n){
if(a[c]>a[num]){
int tmp = a[c];
a[c] = a[num];
a[num] = tmp;
}
}
}

void CreateHeap(int* a,int n){
int t = (n-1) / 2;       //最后一个非叶子点
for(int i=t;i>=0;i--){
Sort(a,i,n);
}
}

void HeapSort(int* a,int n){
for(int i=n-1;i>=0;i--){
int tmp = a[i];
a[i] = a[0];
a[0] = tmp;
Sort(a,0,i);    //因为把0和最后的元素交换,所以每次都只需要从0开始构建heap
}

}

int main()
{
int a[] = {5,2,8,7,4,1,6,9,3,10};
int n = 10;

CreateHeap(a,n);
HeapSort(a,n);

for(int i=0;i<n;i++){
cout << a[i] << " ";
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: