分配排序
分配排序是基于分配和收集的排序方法。其基本思想是:先将待排序记录序列分配到不同的桶里,然后在把各桶中的记录依次收集在一起。
桶式排序
桶式排序是一种简单的分配排序,其基本思想是:假设带排序记录的值都在0~m-1之间,设置m个桶,首先将值为i的记录分配到第i个桶中,然后在将各个桶中的记录依次收集起来。
void bucketSort(int arr[], int n,int m)//n为序列中元素的个数,m为序列中最大的元素的值。
{
//定义一个数组,存放各数字出现的次数。初始值均赋值为0
vector<int>times = { 0 };
times.resize(m + 1);
//定义一个临时数组
int *tempArry=new int[n];
//统计各数字出现的次数
for (int i = 0; i<n; i++)
{
times[arr[i]]++;
}
//重新组织存放出现次数的数组
for (int i = 1; i<m + 1; i++)
{
times[i] += times[i - 1];
}
//从后向前对元素进行收集
for (int i = n - 1; i >= 0; i--)
{
tempArry[--times[arr[i]]] = arr[i];
}
//把临时数组中的元素复制到原数组中
for (int i = 0; i<n; i++)
{
arr[i] = tempArry[i];
}
delete[] tempArry;
}