思路:

堆排序

代码:

#include<bits/stdc++.h>
using namespace std;

void AdjustDown(vector<int>& A,int k,int len, int sortmode){
    A[0]=A[k];
    for(int i=2*k;i<=len;i*=2){
        if(sortmode == 0){  // 升序排序
            if(i<len && A[i]<A[i+1]){
                i++;
            }
            
            if(A[0]>=A[i]){
                break;
            }else{
                A[k]=A[i];
                k=i;
            }
        }
        if(sortmode == 1){  // 降序排序
            if(i<len && A[i]>A[i+1]){
                i++;
            }
            
            if(A[0]<=A[i]){
                break;
            }else{
                A[k]=A[i];
                k=i;
            }
        }
    }
    A[k]=A[0];
}

void BuildMaxHeap(vector<int>& A,int len, int sortmode){
    for(int i=len/2;i>0;i--){
        AdjustDown(A, i, len, sortmode);
    }
}

void swap(int &a,int &b){
    int tmp=a;
    a=b;
    b=tmp;
}

void heapsort(vector<int>& A,int len, int sortmode){
    BuildMaxHeap(A, len, sortmode);
    for(int i=len;i>1;i--){
        swap(A[i],A[1]);
        AdjustDown(A, 1, i-1, sortmode);
    }
}

void printArr(vector<int>& A,int len){
    for (int i = 1; i <= len;i++){
        cout << A[i] << " ";
    }
    cout << endl;
}

int main(){
    int num,select;
    while(cin>>num){
        vector<int> arr;
        arr.push_back(0);
        
        int flag;
        for(int i=0;i<num;i++){
            cin>>flag;
            arr.push_back(flag);
        }
        
        cin>>select;

        heapsort(arr, arr.size() - 1, select);
        
        for(vector<int>::iterator it=arr.begin()+1;it!=arr.end();it++){
            cout<<*it<<" ";
        }
    }
    return 0;
}