#include<iostream>
using namespace std;
void Swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void Percdown(int *A,int p,int N){
//从p结点开始向下过滤
int parent,child;
int X;
X = A[p];
for(parent = p; (parent*2+1)< N ; parent = child ){
child = parent*2 + 1;
if((child!=N-1)&&(A[child+1]>A[child]))
child++;
if( A[child] <= X ){
break;
}
else{
A[parent] = A[child];
}
}
A[parent] = X;
}
void HeapSort(int *A,int N){
int i;
for(i = N/2 -1;i>=0;i--){
Percdown(A,i,N);
}
for(i=N-1;i>0;i--){
Swap(&A[0],&A[i]);
Percdown(A,0,i);
}
}
int main(){
int A[8] = {0,2,5,1,21,9,4,3};
for(int i=0;i<8;i++){
cout<<A[i]<<" ";
}
HeapSort(A,8);
cout<<"\nafter sort: ";
for(int i=0;i<8;i++){
cout<<A[i]<<" ";
}
cout<<endl;
return 0;
}
堆排序
最新推荐文章于 2024-09-04 23:05:17 发布