题意:
	        输入整型数组和排序标识,对其元素按照升序或降序进行排序。
	方法一:
	C++快排函数
思路:模拟。
当排序标识是0时,升序;
当排序标识是1时,降序。
#include <bits/stdc++.h>
using namespace std;
int main(){
    
    int n,a[1005],x;
    cin >> n;
    for(int i=0;i<n;i++)//输入
        cin >> a[i];
    cin >> x;
    if(x==0){
        sort(a,a+n);//升序
    }else{
        sort(a,a+n,greater<int>());//降序
    }
    for(int i=0;i<n;i++)//输出
        cout << a[i] << " ";
    cout << endl;
    return 0;
}
时间复杂度:
空间复杂度:![]()
	方法二:
	手写快排
思路:以最左的数设置为哨兵值。
操作使得小于等于哨兵值的数在哨兵值左边,大于等于哨兵值的数在哨兵值右边。最后,递归左区间,递归右区间。
#include <bits/stdc++.h>
using namespace std;
int n,a[1005],x;
void quick_sort(int l,int r){//升序
    if(l>=r)
        return;
    int i=l,j=r;
    int t=a[i];//哨兵值
    //小于等于哨兵值的数在哨兵值左边,大于等于哨兵值的数在哨兵值右边
    while(i<j){//循环
        while(i<j&&a[j]>=t)
            j--;
        a[i]=a[j];
        while(i<j&&a[i]<=t)
            i++;
        a[j]=a[i];
    }
    a[i]=t;
    quick_sort(l,i-1);//左递归
    quick_sort(i+1,r);//右递归
}
int main(){
    
    
    cin >> n;
    for(int i=0;i<n;i++)//输入
        cin >> a[i];
    cin >> x;
    if(x==0){
        quick_sort(0,n-1);//升序
    }else{
        quick_sort(0,n-1);
        reverse(a,a+n);//降序
    }
    for(int i=0;i<n;i++)//输出
        cout << a[i] << " ";
    cout << endl;
    return 0;
}
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号