学校正在选举学生会成员,有 n(n\le 999)n(n≤999) 名候选人,每名候选人编号分别从 1 到 nn,现在收集到了 m(m<=2000000)m(m<=2000000) 张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。输入 nn 和 mm 以及 mm 个选票上的数字,求出排序后的选票编号。
无
无
输入 #1复制
5 10 2 5 2 2 5 2 2 2 1 2
输出 #1复制
1 2 2 2 2 2 2 2 5 5
分析:
排序篇的第一题,没啥说的,冒牌?选择?不行,两百万大小的数组在那摆着呢,想想都会超时,快排吧
啪啪啪啪,一顿手撸代码,写完了,不愧是练了一寒假的蓝桥杯,写快排还不是轻而易举?
#include
#include
using namespace std;
int n;
int m;
int xp[2000005];
void quicksort(int left,int right);
int findmid(int left,int right);
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>xp[i];
quicksort(1,m);
//sort(xp+1,xp+m+1);
cout<=right)
return;
int midnum=findmid(left,right);
//cout<<"mid is "<=right)
return left;
int high=right;
int low=left;
int temp=xp[low];
while(low=temp) high--;
xp[low]=xp[high];
while(low
走你,五个测试数据,超时俩???
不是吧兄弟,这是快排,还能超时?快排都超时,其他的还玩什么?
人类迷惑大赏,没啥说的,去看看题解吧
emmmm,大家提到了桶排序,这是什么排序?之前没听过
竟然还有人用了c++STL里的sort就AC了??????怎么可能,我快排怎么会比他一个自带的sort还要慢?
一定是误判了,快排再来一遍,还是超时,我呆了,那试试sort吧,走你,我靠,AC了?
不行,我不相信,为什么快排还不如一个sort?
去网上找找答案,嗯....找到了一篇,原来sort并不慢啊,是基于快排改进的函数.....是我孤陋寡闻了,我之前一直以为自带的sort函数时间复杂度是O(n^2),好吧,记住了,以后多用这个了,而且貌似sort比你一般手写的快排性能还要好.....我去自闭会儿
上sort代码
#include
#include
using namespace std;
int n;
int m;
int xp[2000005];
void quicksort(int left,int right);
int findmid(int left,int right);
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>xp[i];
//quicksort(1,m);
sort(xp+1,xp+m+1);
cout<=right)
return;
int midnum=findmid(left,right);
//cout<<"mid is "<=right)
return left;
int high=right;
int low=left;
int temp=xp[low];
while(low=temp) high--;
xp[low]=xp[high];
while(low
既然提到了桶排序,那就去看看桶排序是啥,以前也没听说过,看到一篇博客讲得不错
https://www.cnblogs.com/bqwzx/p/11029264.html
那就实现一下吧
#include
#include
using namespace std;
int n;
int m;
int xp[2000005];
int a[1000];
void quicksort(int left,int right);
int findmid(int left,int right);
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>xp[i];
for(int i=1;i<=m;i++)
a[xp[i]]+=1;
for(int i=1;i<=n;i++)
{
while(a[i])
{
cout<
也AC了,看来桶排序还是有点用的,以后要多注意了