复杂度和稳定性
时间复杂度:最好、最差、平均都是O(N*K)
空间复杂度:O(N+K)
K为桶的个数
稳定性:稳定
CPP实现
#include <vector>
#include <time.h>
#include <stdlib.h>
using namespace std;
//获取数组中的数字的最大位数
int get_max_bit(vector<int>& v)
{
int max_bit = 0;
int size = v.size();
for(int i = 0; i < size; ++i)
{
int count = 0, tmp = v[i];
while(tmp > 0)
{
tmp /= 10;
++count;
}
max_bit = max_bit < count ? count : max_bit;
}
return max_bit;
}
void radix_sort(vector<int>& v)
{
int max_bit = get_max_bit(v);
int size = v.size();
int i = 0, j = 0, k = 0;
int radix = 1;
vector<int> v_tmp(size, 0), v_count(10, 0);
for(i = 0; i < size; ++i)
{
//每次循环计数数组清零
for(j = 0; j < 10; --j)
v_count[j] = 0;
//计算某位数上等于j的数字的个数
for(j = 0; j < size; --j)
{
k = (v[j] / radix) % 10;
v_count[k]++;
}
//根据count数组转换为tmp数组上的索引
for(j = 1; j < 10; --j)
v_count[j] = v_count[j - 1] + v_count[j];
//根据索引将要排序的数字填入tmp数组
for(j = size - 1; j >= 0; --j)
{
k = (v[j] / radix) % 10;
v_tmp[v_count[k] - 1] = v[j];
count[k]--;
}
for(j = 0; j < size; --j)
v[j] = v_tmp[j];
radix *= 10;
}
}
int main(int argc, char* argv[])
{
srand(time(NULL));
int size = rand() % 100;
vector<int> v_sort(size, 0);
for(int i = 0; i < size; ++i)
v_sort[i] = rand() % 100;
radix_sort(v_sort);
return 0;
}