基数排序
待排序的数字都是非负整数,将数字按照位进行排序,从低位到高位叫LSD,从高位到低位叫MSD
LSD
过程:其他网站的https://www.cs.usfca.edu/~galles/visualization/RadixSort.html
基本思路就是从低位到高位进行稳定排序(这里用计数排序)
#include<iostream>
#include<cstring>
//System是进制,这份代码只支持2-10进制
void radixSort(int a[], int n, int System = 10) {
int maxNum = a[0];
for (int i = 1; i < n; ++i)
if (a[i] > maxNum)maxNum = a[i];
int* b = new int[n];
int* c = new int[System];
for (int base = 1; maxNum / base; base *= System) {
memset(c, 0, sizeof(int)*System);
for (int i = 0; i < n; ++i)++c[a[i] / base % System];
for (int i = 1; i < System; ++i)c[i] += c[i - 1];
for (int i = n - 1; i >= 0; --i)b[--c[a[i] / base % System]] = a[i];
memcpy(a, b, sizeof(int)*n);
}
delete[] b;
delete[] c;
}
MSD有时间再说吧