桶排序的思想是将数组分到有限数量的桶中,再对每一个子桶再分别排序(有可能再使用别的排序方法或者以递归的方式再调用桶排序),最后将各个桶中的数据有序的合并起来。
排序过程:
- 假设待排序的一组数统一的分布在一个范围中,并将这一范围划分成几个子范围,也就是桶。
- 将待排序的一组数,分档归入这些子桶中,并将桶中的数据进行排序。
- 将各个桶中的数据有序的合并起来。
void bucketSort(float numbers[], int n)
{
vector<float> b[n];
for(int i = 0; i < n; i++)
{
int bi = n * numbers[i];
b[bi].push_back(numbers[i]);
}
for(int i = 0; i < n; i++)
sort(b[i].begin(), b[i].end());
int index = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < b[i].size(); j++)
numbers[index++] = b[i][j];
}