我们刚开始学习C++算法时最简单的就应该是排序了,排序有很多种,今天我写的博客就关于桶排序。
桶排序的基本原理十分简单,但真正的桶排序并不简单。桶排序的思路如下:
题目一般会给定需要排序的数的最大值,桶排序的思路就是定义一个长度为数的最大值的一维数组,我们每输入一个数就将数组里面编号为那个数的桶加一。当然先要将数组初始化为0喽!
输入完成后就应该输出了,我们写一个循环从1到n,n为数的最大值。如果我们定义的桶数组中对应的位置ai不为空,那么就将i变量输出ai次。当然也可以输出1次(起到去重的效果)。
具体代码如下:
1.单纯桶排序:
#include<bits/stdc++.h>//调用万能头文件
using namespace std;
#define MAX 105//定义数组长度
int n,a[MAX],t[MAX];
int main(){
memset(t,0,sizeof t);//桶数组初始化为0
cin>>n;//读入数组元素数量,也可以用scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>a[i];//读入数组每一个元素
t[a[i]]++;
}
for(int i=1;i<=105;i++){
if(t[i]!=0){
for(int j=1;j<=t[i];j++) cout<<i<<' ';
}
}
return 0;
}
2.排序并去重:
#include<bits/stdc++.h>//调用万能头文件
using namespace std;
#define MAX 105//定义数组长度
int n,a[MAX],t[MAX];
int main(){
memset(t,0,sizeof t);//桶数组初始化为0
cin>>n;//读入数组元素数量,也可以用scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>a[i];//读入数组每一个元素
t[a[i]]++;
}
for(int i=1;i<=105;i++){
if(t[i]!=0) cout<<i<<' ';
}
return 0;
}