基数排序是桶排序的一种,算法思路为:
- 利用队列进行数据收发
- 创建一个队列数组,数组大小为10,每个元素都是一个队列,存储取模为1~9的数
- 从低位到高位进行数据收发,完成排序
- 适用于数据位不高的情况(若不知道数据集的最大位数,则只能往大了猜,降低效率)
基数排序是不稳定排序算法,时间复杂度为,K为数据最大位数,也可表示为
。
虽然基数排序有着非常优秀的效率,甚至比快排还快,但是由于算法受限于数据的位数,因此并不常见。
代码示例,假设测试数据数组元素最大位数为3:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <queue>
using namespace std;
// 数据最大位数
#define K 3
// 取模的类别数(桶数、基数)
#define RADIX 10
// 桶
queue<int> _q[RADIX];
// 获取val值对应桶的位置,即哈希映射
int GetPos(int a, int k)
{
int pos = a % RADIX;
while (k--)
{
a /= RADIX;
pos = a % RADIX;
}
return pos;
}