RadixSort(基数排序)原理及C++代码实现
基数排序是一种思想很值得学习的排序方法。
它突破了正常的排序思维:先排高位,如果高位相同再排次高位,直至最低。它的思想是利用稳定排序从低位开始排,最后再排最高位。
另外它用来划分的位不一定是一位一位的划分,还可以是每几位一组,然后按组从低到高来排序。
事实上,当总位数b等于O(lgn),并且每一组的位数r等于lgn时,基数排序的时间复杂度为θ(n)。
基数排序当然也是稳定排序。
代码如下:(仅供参考)
 int PickDigitOn_i(int n, const int i) {
     for (int k = ; k <= i; ++k)
         n /= ;
     return n % ;
 }
 void stablesort_onDigit_i(int * const begin, int * const end, int d) { //使用计数排序作为稳定排序
     int temp[] = {}; //十进制数
     vector<int> out(end - begin);
     for (int i = ; i < end - begin; ++i)
         ++temp[PickDigitOn_i(*(begin + i), d)];
     for (int i = ; i < ; ++i)
         temp[i] += temp[i-];
     for (int i = end - begin - ; i >= ; --i) {
         out[temp[PickDigitOn_i(*(begin + i), d)] - ] = *(begin + i);
         --temp[PickDigitOn_i(*(begin + i), d)];
     }
     for (int i = ; i < end - begin; ++i)
         *(begin + i) = out[i];
 }
 void RadixSort(int * const begin, int * const end) { //假设三位数的排序
     for (int i = ; i < ; ++i) {
         stablesort_onDigit_i(begin, end, i);
     }
 }
RadixSort(基数排序)原理及C++代码实现的更多相关文章
- 编译原理-词法分析04-NFA & 代码实现
		
编译原理-词法分析04-NFA & 代码实现 0.术语 NFA 非确定性有穷自动机nondeterministic finite automation. ε-转换ε-transition 是无 ...
 - 最短路径A*算法原理及java代码实现(看不懂是我的失败)
		
算法仅仅要懂原理了,代码都是小问题,先看以下理论,尤其是红色标注的(要源代码请留下邮箱,有測试用例,直接执行就可以) A*算法 百度上的解释: A*[1](A-Star)算法是一种静态路网中求解最短路 ...
 - 对象部分初始化:原理以及验证代码(双重检查锁与volatile相关)
		
对象部分初始化:原理以及验证代码(双重检查锁与volatile相关) 对象部分初始化被称为 Partially initialized objects / Partially constructed ...
 - 9, java数据结构和算法: 直接插入排序, 希尔排序, 简单选择排序, 堆排序, 冒泡排序,快速排序, 归并排序, 基数排序的分析和代码实现
		
内部排序: 就是使用内存空间来排序 外部排序: 就是数据量很大,需要借助外部存储(文件)来排序. 直接上代码: package com.lvcai; public class Sort { publi ...
 - 【算法】(查找你附近的人)  GeoHash核心原理解析及代码实现
		
本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...
 - When I see you again(加密原理介绍,代码实现DES、AES、RSA、Base64、MD5)
		
关于网络安全的数据加密部分,本来打算总结一篇博客搞定,没想到东西太多,这已是第三篇了,而且这篇写了多次,熬了多次夜,真是again and again.起个名字:数据加密三部曲,前两部链接如下: 整体 ...
 - Logistic回归分类算法原理分析与代码实现
		
前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...
 - DEDECMS数据库执行原理、CMS代码层SQL注入防御思路
		
我们在上一篇文章中学习了DEDECMS的模板标签.模板解析原理,以及通过对模板核心类的Hook Patch来对模板的解析流量的攻击模式检测,达到修复模板类代码执行漏洞的目的 http://www.cn ...
 - Android中悬浮窗口的实现原理和示例代码
		
用了我一个周末的时间,个中愤懑就不说了,就这个问题,我翻遍全球网络没有一篇像样的资料,现在将实现原理简单叙述如下: 调用WindowManager,并设置WindowManager.LayoutPar ...
 
随机推荐
- cmd 进入指定文件夹
			
1.通常情况下,我们要进入其他盘符下的任意目录,需要在CMD窗口运行两次命令:第一次,进入盘符,第二次进入指定目录 #进入D盘 d: #进入D盘下的anaconda目录 cd anacond 2.通过 ...
 - vi粘贴代码后格式混乱的问题
			
最近在远程终端使用vi发现从其他地方复制代码的后,粘贴到vi里面出现格式变乱的问题. 主要是因为终端通常无法区分输入是来自用户输入还是来自粘贴,所以终端也不能通知 vim 输入来自何处.在 vim 里 ...
 - 快速排序&基数排序
			
//快速排序 #include<stdio.h> void QuickSort(int R[],int low,int high) { int i=low,j=high; int pivo ...
 - linux目录和安装目录学习
			
我一般会在/opt目录下创建 一个software目录,用来存放我们从官网下载的软件格式是.tar.gz文件,或者通过 wget+地址下载的.tar.gz文件 执行解压缩命令,这里以nginx举例 t ...
 - shift+alt 可对notepadplusplus 打开的文档进行列操作
			
shift+alt 可对notepadplusplus 打开的文档进行列操作
 - python+Sqlite+Dataframe打造金融股票数据结构
			
5. 本地数据库 很简单的用本地Sqlite查找股票数据. DataSource类,返回的是Dataframe物件.这个Dataframe物件,在之后的业务,如计算股票指标,还需要特别处理. impo ...
 - 【MySQL参数优化】根据架构优化
			
根据MySQL的架构优化 参数调整的最终效果: 1)SQL执行速度足够快 2)业务吞吐量足够高:TPS,QPS 3)系统负载可控,合理:cpu,io负载 在调整参数的时候,应该熟悉mysql的体系架构 ...
 - 吴裕雄--天生自然 JAVA开发学习:日期时间
			
import java.util.Date; public class DateDemo { public static void main(String args[]) { // 初始化 Date ...
 - ubuntu18.04国内软件源
			
ubuntu默认的软件源是国外的,下载软件很慢,需要更新为国内的源以提升速度,现在可以通过ubunt software来设置了,不过还是习惯了命令行修改的方式. 更新方法 123 sudo vi /e ...
 - python中的倒序遍历
			
1.在列表本身倒序 a = [1, 3, 7, 5, 2, 6] a.reverse() # 在列表本身进行倒序,不返回新的值 print(a) # 输出a: # [6, 2, 5, 7, 3, 1] ...