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