#include <vector>
#include <deque>
void radix_sort(std::vector<int> &nums) {
const int iCount = nums.size();
if (iCount < 2) {
// 如果数组长度小于2就没必要排序
return;
}
std::vector<std::deque<int>> save(10);
int iRadix = 1, i, j;
bool bFlag, bAlready;
while (true) {
for (i = 0; i < iCount; ++i) {
// 按照个位,十位,百位...分别排序,每一次排列完成都会使该位的相对位置确定
save[(nums[i] / iRadix) % 10].push_back(nums[i]);
}
iRadix *= 10;
i = 0;
bFlag = true;
bAlready = false;
for (j = 0; j < 10; ++j) {
while (!save[j].empty()) {
nums[i] = save[j].front();
save[j].pop_front();
if (bAlready && bFlag) {
if (nums[i] >= nums[i - 1]) {
bFlag = true;
}
else {
bFlag = false;
}
}
bAlready = true;
++i;
}
}
if (bFlag) {
// 如果发现已经排列完成,则不用再继续循环下去
return;
}
}
}