基数排序详见《数据结构与算法分析》40页
int maxbit(const vector<int>& unSort)
{
int maxb = 0;
for (int i = 0; i<unSort.size(); i++)
{
int tempMaxb = 1;
int tempNum = unSort[i];
while (tempNum / 10)
{
tempNum = tempNum / 10;
tempMaxb++;
}
if (tempMaxb>maxb)
maxb = tempMaxb;
}
return maxb;
}
void radixSort(vector<int>& unSort)
{
vector<vector<int>> count;
vector<vector<int>> tempCount;
for (size_t i = 0; i < 10; i++)
{
vector<int> temp;
count.push_back(temp);
}
size_t maxBite = maxbit(unSort);
int base = 1;
while (unSort.size() != 0)
{
count[(unSort.back() / base) % 10].push_back(unSort.back());
unSort.pop_back();
}
for (size_t t = 0; t < maxBite; t++)
{
tempCount.clear();
tempCount = count;
for (size_t i = 0; i < 10; i++)
{
count[i].clear();
}
base = base * 10;
for (size_t i = 0; i < 10; i++)
{
for (size_t j = 0; j < tempCount[i].size(); j++)
{
count[(tempCount[i][j] / base) % 10].push_back(tempCount[i][j]);
}
}
}
unSort = count[0];
}