一、桶排序(BucketSort)
桶排序的思路就是,数组元素为i,就放在第i个桶里,最后收集这些数据。
在我看来,桶排序其实更像是一种很有帮助的思维方式。
【时空复杂度】
最好的情况下,每个桶只有一个数据,那么最好时间复杂度为 O(N)
假设 C 为桶内排序所花费的时间,那么平均时间复杂度:O(N+C)
此外,假设 M 为桶排所需的辅助空间大小,那么空间复杂度为为:O(M)
(做完信息学奥赛一本通T1186和T1187才来学的桶排序,才发现这俩题做法叫桶排序……)
二、代码实现
#include<iostream>
using namespace std;
void BucketSort(int a[],int n,int b[])
{
int maxx = -10086;//找个远比所有元素小的值即可
for(int i=0; i<n; i++)
{
if(a[i]>maxx)
maxx = a[i];//记桶的数量
b[a[i]]++;//桶中存储
}
int k = 0;
//收集桶中数据
for(int i=0; i<=maxx; i++)
for(int j=0; j<b[i]; j ++)
a[k++] = i;
}
int main()
{
int n,a[10000],b[10000]= {0};
cin >> n;
//输入待排序数组
for(int i=0; i<n; i++)
cin >> a[i];
//调用函数排序
BucketSort(a,n,b);
//输出排序后函数
for(int i=0; i<n; i++)
cout << a[i] << " ";
cout <<endl;
return 0;
}