标签:快速 == class vector color bug ace div 数组
给定一个数组,统计前k大的数并且把这k个数从大到小输出。
10 4 5 6 9 8 7 1 2 3 0 5
9 8 7 6 5
查看
运用快速排序思想,将区间分成两半,一半比某个数都大,一半比某个数都小。
#include<cstdio> #include<cmath> #include<iostream> #include<algorithm> #include<vector> #include<string> #include<map> #include<cstring> #define DEBUG(x) cout << #x << " = " << x << endl using namespace std; const int MAXN=1e5+10; int N; int a[MAXN]; bool cmp(int a,int b) { return a>b; } int arrangeRight(int a[],int l,int r,int k) { // if(r-l+1==k){ // return l; // } int i=l,j=r; int n=r-l+1; int key=a[l]; while(i<j){ while(i<j&&a[j]>=key)j--; swap(a[i],a[j]); while(i<j&&a[i]<=key)i++; swap(a[i],a[j]); } if(r-i+1==k){ return i; } else if(r-i+1>k){ return arrangeRight(a,i+1,r,k); } else { return arrangeRight(a,l,i-1,k-(r-i+1)); } } int main() { // freopen("in.txt","r",stdin); scanf("%d",&N); for(int i=0;i<N;i++){ scanf("%d",&a[i]); } int M; scanf("%d",&M); int p=arrangeRight(a,0,N-1,M); sort(a+p,a+N,cmp); for(int i=p;i<N;i++){ printf("%d\n",a[i]); } return 0; }
标签:快速 == class vector color bug ace div 数组
原文地址:https://www.cnblogs.com/MalcolmMeng/p/9128050.html