看到一篇很棒的基数排序代码,代码简洁,STL容器用得很棒,推荐:
基数排序
基数排序就是依次按照相应位数的值进行排序,排位个位、十位、百位等,就能确定顺序了,感觉非常nice。
自己实现了下:
void radix_sort(vector<int> &source)
{
int places = 1;
vector<vector<int>> vessels(10);
for (int i = 0; i < 3; i++)
{
places = pow(10, i); //记录每个数的位数
for (int& value:source)
vessels[(value / places) % 10].push_back(value);
source.clear();
for (auto& vessel:vessels)
{
for (int& tmp:vessel)
source.push_back(tmp);
vessel.clear(); // 清空里面嵌套的容器
}
//vessels.clear(); // 此处报错,vessels清空后,无法用语句22赋值
}
}
就这个代码而言,基数排序是稳定的(相同的数,几轮排序下来均不会改变顺序),时间复杂度为O(n)。