#include <iostream>
using namespace std;
void AdjastHeapSort(int a[],int i,int n){//调整节点i,数组共有n个节点
if(n == 1||i >(n-2)/2){
return ;
}
int iLeft = 2*i+1;//i从0开始
int iRight = 2*i+2;
if(iRight<=n-1){
if(a[i]>=a[iLeft]&&a[i]>=a[iRight]){
return ;
}
if(a[i]<a[iLeft]&&a[iRight]<=a[iLeft]){
int temp = a[iLeft];
a[iLeft] = a[i];
a[i] = temp;
AdjastHeapSort(a,iLeft,n);
return ;
}
if(a[i]<a[iRight]&&a[iLeft]<=a[iRight]){
int temp = a[iRight];
a[iRight] = a[i] ;
a[i] = temp;
AdjastHeapSort(a,iRight,n);
return ;
}
}
else{
if(a[i]>=a[iLeft]){
return ;
}
else{
int temp = a[iLeft];
a[iLeft] = a[i];
a[i] = temp;
AdjastHeapSort(a,iLeft,n);
return ;
}
}
}
void CreateHeap(int a[],int n){
int iFirst = (n-2)/2;
for(;iFirst>=0;iFirst--){
AdjastHeapSort(a,iFirst,n);
}
}
void HeapSort(int a[],int n){
CreateHeap(a,n);
int temp;
for(int i = 0;i<n-1;i++){
temp = a[n-i-1];
a[n-i-1] = a[0];
a[0] = temp;
AdjastHeapSort(a,0,n-i-1);
}
}
int main() {
int a[] = {1,2,3,5,343,5,3,2,4,2,2,23};
HeapSort(a,12);
for(int i = 0 ; i < 12 ;++ i){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
【面试准备】堆排
最新推荐文章于 2022-03-21 15:56:43 发布