在weiss的书中,推导了基于比较的排序算法的一般下界为Nlog(N)。但是一些排序不基于比较的可以达到线性时间,称为线性时间排序(Linear-Time Sort),比如桶排序(Bucket Sort)和基数排序(Radix Sort)。桶排序比较简单,基数排序相当于通过循环进行了多次桶排序。基数排序的原理可以参考这篇博客。它在数据量有限制(比如知道最大的数是多少,知道总共最多有多少种元素个数)的时候,可以通过这些信息量,获得更快的排序时间(但有时候,当待排系列的每个元素组成部分很长时,并不一定比基于比较的排序算法快)。基数排序常见的应用是排序整数,字符串等。这里简化问题,待排序列中只有三位数的正整数存在。记录一下基数排序的基本实现。
#include<iostream>
#include<vector>
#include<random>
#include<ctime>
#include<iterator>
#include<algorithm>
#include<cmath>
using namespace std;
/*
基数排序
简化了问题,待排向量为整型,且为三位数
*/
void radixSort(vector<int> & source)
{
const int BUCKETS = 10;
vector<vector<int>> b