题意:
输入整型数组和排序标识,对其元素按照升序或降序进行排序。
方法一:
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号