前言
在现实中,我们可能会对各种事物进行排序,例如,成绩呀,质量呀之类的,这件事情计算机同样也可以完成,一起来看看吧
例题
(本题为自创,不涉及版权问题)
给定一串数量不大于500个的整数,ai不大于1000,从小到大排序
输入n,和n个数
输出从小到大排序好的数
样例
输入:
5
1 3 5 70 2
输出
1 2 3 5 70
解决这道题大家看过我博客的可能第一时间就会想到sort,只需要sort(a,a+n)就可以解决问题,有不明白,看我博客:sort详解
今天我们就来学点不一样的:桶排序
他的空间时间复杂度都是O(N),所以会随着数值变大而变慢
桶排序,就是把数据装进一个个“桶”来进行排序,这句话说着很别扭,但实现起来却很简单,一起来看一看
tong[a[i]]++;
没错,就是把数值看作是列表指针,只要将对应的内存地址++就可以了,说白了,就是不用你动手,应用计算机的特性(内存的连续性,内存地址)来进行排序。这部分大家可能不懂,不懂的在评论就可以了。
桶排序还有:去重,计数等作用,只要牢记以上的“桶”思想,就可以很方便的进行排序
下面,我们将桶排序带入例题
#include<bits/stdc++.h>
using namespace std;
int n,a[1005];
int main(){
cin>>n;
for(int i=0;i<n;i++){
int temp;
cin>>temp;//临时存放
a[temp]++;
}
for(int i=0;i<=1000;i++){
for(int j=1;j<=a[i];j++){//避免有重复数据不输出
cout<<i<<' ';
}
}
return 0;
}
}
解决了,如果要增加去重
可以把里层循环去掉
谢谢大家,下次见,如果还想让我讲什么排序算法,欢迎评论!