为什么我的快速排序超时了

P1271 【深基9.例1】选举学生会

凑合着看吧 ```cpp #include<stdio.h> #include<iostream> #include<cstdlib> using namespace std; int a[2000000]; void qsort(int a[],int L,int R) //快速排序 { printf("L=%d R=%d\n",L,R),_sleep(500); if(L>=R) return; int i,j,key; i=L,j=R,key=a[i]; while(j>i) { printf("(i,j):%d %d\n",i,j),_sleep(500); while(j>i&&a[j]>key)j--; //a[i]=a[j], if(i<j)a[i++]=a[j]; while(j>i&&a[i]<key)i++; if(i<j)a[j--]=a[i]; } a[i]=key; cout<<"Sorted:"; for(int i=L;i<=R;++i)cout<<a[i]<<' ';cout<<'\n'; //qsort(a,0,i-1); qsort(a,L,i-1); qsort(a,i+1,R); } int main() { int n,m; cin>>n>>m; for(int i=0;i<m;i++) cin>>a[i]; qsort(a,0,m-1); for(int i=0;i<m;i++) printf("%d ",a[i]); } ```
by cat_lover1 @ 2024-02-02 18:26:38


为什么不直接用sort(a,a+m)呢?
by Ling_C @ 2024-02-02 18:40:26


@[jumao123](/user/1278698) 这道题n比较小,为什么不直接记录每个数出现的数量直接水过呢? **上代码** ```cpp #include <bits/stdc++.h> using namespace std; int n, m, a[1000], x; int main() { cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> x; a[x]++; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= a[i]; j++) cout << i << " "; } return 0; } ``` ~~不然n就是废废的~~
by __Rickysun__ @ 2024-02-02 18:49:12


@[Ling_C](/user/564979) 我试过了,也会超
by __Rickysun__ @ 2024-02-02 18:49:37


@[Rickysun](/user/824205) 我用sort AC了 ``` #include<bits/stdc++.h> using namespace std; int a[2000005]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=m;i++){ cin>>a[i]; } sort(a+1,a+m+1); for(int i=1;i<=m;i++){ cout<<a[i]<<" "; } return 0; } ```
by Ling_C @ 2024-02-03 09:37:24


@[Ling_C](/user/564979) ~~是我多嘴,我可能代码有点问题,不过数据量但凡再大一点你就AC不了了~~
by __Rickysun__ @ 2024-02-03 10:24:22


@[Rickysun](/user/824205) 追求优化时间复杂度的话建议堆排序
by Ling_C @ 2024-02-03 12:30:19


@[Rickysun](/user/824205) 但这种 普及- 根本没必要
by Ling_C @ 2024-02-03 12:30:54


~~一看就是水题~~sort直接切了
by wyxrl @ 2024-02-20 00:13:11


|