桶排序适用于均匀的数据排列
桶排序主要三步
1.建桶
2.排序
3.还原
void sort_bucket(vector<int>&arr, int bucketNum)
{
int maxN = max(arr, 0, arr.size());
int minN = min(arr, 0, arr.size());
int everyNum = ((maxN - minN + 1) / bucketNum) + 1;
vector<vector<int>>allbucket;//所有的桶
allbucket.resize(bucketNum);
//建桶
for (int i = 0; i < arr.size(); i++)
{
int v = arr[i];
int index = (v - minN) / everyNum;
allbucket[index].push_back(v);
}
//排序
for (int i = 0; i < allbucket.size(); i++)
{
sort_insert(allbucket[i]);
}
//还原
int num = 0;
for (int i = 0; i < allbucket.size(); i++)
{
for (int j = 0; j < allbucket[i].size(); j++)
{
arr[num++] = allbucket[i][j];
}
}
}