可以用桶排序,最多共$999$个人。
```cpp
//a数组表示每个人的投票数量。
for(i=1;i<=n;i++)//访问每一个人。
for(j=1;j<=a[i];j++)
cout<<i<<" ";//输出个数。
```
by 2021zjhs005 @ 2023-10-13 18:04:42
此题可以用桶排
冒泡的复杂度在O(n^2),太大了
在不同的题目中可以视自己的需要来选择排序方法:
~~1.冒泡~~
~~极其不建议使用~~
2.桶排
大致是利用数组下标进行统计的排序
适用于数的大小范围小的排序
3.插排
即插入排序
在原来的有序数组基础上进行插入
类似于冒泡一遍
适合于需要一边插入数据一边处理的题目
3.快排
用sort函数就基本可以解决大部分的排序
4.堆排
插入数据的复杂度小于插排
调用的复杂度略大于插排
可以一边输入一边进行处理
------------
在绝大多数情况下快排就够了
具体的视情况而定
by liuqichen121 @ 2023-10-13 18:16:21
$O(m^2)$ 会 TLE 吧。
by BugGod @ 2023-10-13 18:20:31
其实最简单的就是一个sort解决,不过这么大的数据用sort也不一定过
而且冒泡可以优化 ~~虽然也不一定能过~~
这么小的范围用桶排比较保险吧
by FXLIR @ 2023-10-13 18:47:17
```cpp
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
return a<b;
}
int main()
{
int n,m;
cin>>n>>m;
int a[m];
for(int i=0;i<m;i++)
{
cin>>a[i];
}
sort(a,a+m+1,cmp);
for(int i=0;i<m;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
```
by yuanruikang @ 2023-10-14 16:00:58
用sort不就可以啦
```
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[m];
for(int i=0;i<m;i++){
cin>>a[i];
}
sort(a,a+m);
for(int i=0;i<m;i++){
cout<<a[i]<<" ";
}
return 0;
}
```
by flh2011 @ 2023-10-24 19:31:44
@[FXLIR](/user/617688) sort可以过
by flh2011 @ 2023-10-24 20:35:06
???
```
#include <bits/stdc++.h>
using namespace std;
const int N=2e6+6;
int n,m,a[N];
int main(){
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;
}
```
简化一点,用sort就可以了
by panghanchen2012 @ 2023-11-08 21:08:19