感觉网上一直没看到基数排序好的代码,就照着算法导论上的实现一遍。
#include<vector>
#include<cstring>
using namespace std;
class Solution{
public:
int GetMax(int n,int *a)
{
int ret=0;
for (int i=0;i<n;i++)
if (a[i]>ret) ret=a[i];
return ret;
}
void RandixSort(int n,int* a)
{
vector<int> digit[11];
int Max=GetMax(n,a);
for (int i=1;Max/i;i*=10)
{
memset(digit,0,sizeof(digit));
for (int j=0;j<n;j++)
{
if (!(a[j]/i)) digit[10].push_back(a[j]);
else
{
int d=a[j]/i%10;
digit[d].push_back(a[j]);
}
}
for (int j=0;j<digit[10].size();j++)
a[j]=digit[10][j];
int pos=digit[10].size();
for (int j=0;j<=9;j++)
{
for (int cnt=0;cnt<digit[j].size();cnt++)
a[pos++]=digit[j][cnt];
}
}
}
};