C++简单题解:
使用快排进行排序:选定一个基准数,从后往左找小于基准数的数,从前往后找大于基准数的数,直到两个指针碰头,最后基准数左右两边分别为大于、小于基准数的数。

#include<iostream>
using namespace std;

int quick(int a[],int i, int j)
{
    int tmp=a[i];
    while(i<j)
    {
        while(i<j&&tmp<=a[j])
            j--;
        if(i<j) a[i++]=a[j];
        while(i<j&&tmp>=a[i])
            i++;
        if(i<j) a[j--]=a[i];
    }
    a[i]=tmp;
    return i;
}
void sort(int a[], int i, int j)
{
    if(i<j)
    {
        int t=quick(a,i,j);
        sort(a,i,t-1);
        sort(a,t+1,j);
    }

}
int main()
{
    int n,flag;
    while(cin>>n)
    {
        int a[n];
        for(int i=0; i<n; i++)
            cin>>a[i];
        cin>>flag;
        sort(a, 0, n-1);
        if(flag)
            for(int i=n-1; i>=0; i--)
                cout << a[i] << " ";
        else
            for(int i=0; i<n; i++)
                cout << a[i] << " ";
        cout << endl;
    }
    return 0;
}