桶排序工作原理:
桶中(对应数组)存放元素出现的次数,
将待排序的元素作为数组的下标,
从小到大考察每个自然数,如果出现次数为0,则该自然数不是待排序元素。出现几次输出几次。
代码实现:
#include <iostream>
#include<stdlib.h>
using namespace std;
int a[101];//a[i]存储i出现的次数,即用于存储数组的“桶”
int main()
{
int b,n,i,j;
cin>>n;
for(i=1;i<=n;i++){
cin>>b;
a[b]++;//记录每个桶里有几个小旗子
}
for(i=0;i<=100;i++)
for(j=1;j<=a[i];j++)
cout<<i<<" ";
system("pause");
return 0;
}
桶排序分析:
桶排序的时间复杂度为O(n),因为桶本身是有序的,所以桶排序并不是基于比较的一种排序,时间复杂度非常优秀。
空间复杂度取决于待排序序列的数值,如果对1和10^9进行排序,就需要把数组开导10^9来完成桶排。(优化:基数排序)
基于桶排序的去重排序:
#include <iostream>
#include <string.h>
#