在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>> buckets(BUCKETS);
//外层循环是根据数字的位数确定的。因为是三位数,所以从2到0
for (int pos = 0; pos <= 2; ++pos)
{
//pos = 0, 表示个位数
//pos = 1

本文介绍了线性时间排序中的基数排序(Radix Sort),它在数据量有限制时能提供更快的排序效率,尤其适用于排序整数和字符串。通过分析,基数排序在某些情况下比基于比较的排序算法更优,特别是处理三位数正整数的排序问题。文中详细阐述了基数排序的基本实现过程。
最低0.47元/天 解锁文章
377

被折叠的 条评论
为什么被折叠?



