注:数组是从arr[1]开始排序
#include<iostream>
using namespace std;
//大根堆
void HeapAdjust(int arr[],int s,int m){
int rc = arr[s];
for(int j=2*s;j<=m;j*=2){
if(j<m&&arr[j]<arr[j+1]) ++j;
if(rc>=arr[j]) break;
int temp = arr[s];
arr[s] = arr[j];
arr[j] = temp;
s = j;
}
arr[s] = rc;
}
void CreatHeap(int arr[],int n){
for (int i=n/2;i>0;--i){
HeapAdjust(arr,i,n);
}
}
void HeapSort(int arr[],int n){
CreatHeap(arr,n);
for (int i=n;i>1;--i){
arr[0] = arr[1];
arr[1] = arr[i];
arr[i] = arr[0];
HeapAdjust(arr,1,i-1);
}
}
void printarray(int arr[],int n)
{
for(int i=1;i<=n;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
int main()
{
// int arr[]={-1,3,8,2,9,12,5};
// 求数组长度
// int n=sizeof(arr)/sizeof(int);
int n;
cin>>n;
int arr[n+1];
for(int i=1;i<=n;i++){
cin>>arr[i];
}
cout<<"oarray:";
printarray(arr,n);
HeapSort(arr,n);
cout <<"sarray:";
printarray(arr,n);
return 0;
}