1)算法简介

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine)上的贡献。

2)算法描述和分析

整个算法过程描述如下:
1、将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。
2、从最低位开始,依次进行一次排序。
3、这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

基数排序的时间复杂度是 O(k•n),其中n是排序元素个数,k是数字位数。

注意这不是说这个时间复杂度一定优于O(n·log(n)),因为k的大小一般会受到n的影响。 以排序n个不同整数来举例,假定这些整数以B为底,这样每位数都有B个不同的数字,k就一定不小于logB(n)。由于有B个不同的数字,所以就需要B个不同的桶,在每一轮比较的时候都需要平均n·log2(B) 次比较来把整数放到合适的桶中去,所以就有:k 大于或等于 logB(n)
每一轮(平均)需要 n·log2(B) 次比较

所以,基数排序的平均时间T就是:
T ≥ logB(n)·n·log2(B) = log2(n)·logB(2)·n·log2(B) = log2(n)·n·logB(2)·log2(B) = n·log2(n)

所以和比较排序相似,基数排序需要的比较次数:T ≥ n·log2(n)。 故其时间复杂度为 Ω(n·log2(n)) = Ω(n·log n) 。

3)算法图解、flash演示、视频演示

图解:

Flash:
可参见http://ds.fzu.edu.cn/fine/resources/FlashContent.asp?id=91中的flash过程

视频:
http://www.tudou.com/programs/view/vfoUHC-tgi0

4)算法代码

#include <stdio.h>
#include <stdlib.h>
void radixSort(int data[]) {  int temp[10][10] = {0};   int order[10] = {0};   int n = 1;   while(n <= 10) {   int i;  for(i = 0; i < 10; i++) {   int lsd = ((data[i] / n) % 10);   temp[lsd][order[lsd]] = data[i];   order[lsd]++;   }   // 重新排列  int k = 0;  for(i = 0; i < 10; i++) {   if(order[i] != 0)  {  int j;  for(j = 0; j < order[i]; j++, k++) {   data[k] = temp[i][j];   }   }  order[i] = 0;   }   n *= 10;   }
}
int main(void) {   int data[10] = {73, 22, 93, 43, 55, 14, 28, 65, 39, 81};   printf("\n排序前: ");   int i;  for(i = 0; i < 10; i++)   printf("%d ", data[i]);   putchar('\n');   radixSort(data);  printf("\n排序後: ");   for(i = 0; i < 10; i++)   printf("%d ", data[i]);   return 0;
}   

5)考察点、重点和频度分析

计数排序在处理密集整数排序的问题的时候非常有限,尤其是有时候题目对空间并不做太大限制,那使用计数排序能够达到O(n)的时间复杂度,远快于所有基于比较的其他排序方法。

转载于:https://www.cnblogs.com/shih/p/6660246.html

【每日算法】基数排序算法相关推荐

  1. 基数排序算法(基于Java实现)

    title: 基数排序算法(基于Java实现) tags: 基数算法 基数排序算法原理及代码实现: 一.基数排序算法的原理 基数排序属于"分配式排序",又称"桶子法&qu ...

  2. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  3. 十大经典排序算法-归并排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  4. 十大经典排序算法-冒泡排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  5. 基数排序算法LSD实现

    基数排序算法的实质是用的分类的方式. LSD 按低位开始分类, 其实在按各位进行分类的时候就已经注定了 相同位数的数的相对大小关系了. lsd实现如下: #include <iostream&g ...

  6. 【算法知识】详解基数排序算法

    已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 [算法知识]详解快速排序算法 [算法知识]详解归并排序算法 基本思想 基数排序的思想是将整数按位数切 ...

  7. JavaScript实现RadixSort基数排序算法(附完整源码)

    JavaScript实现RadixSort基数排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 RadixSort.js完整源代码 Comparator.js完整 ...

  8. 经典排序算法(10)——基数排序算法详解

    基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较. 一.算法基本思想 (1)基本思想 基数排序是基于桶排序来实现.通过键值的部分 ...

  9. java 线性的排序算法_数据结构之排序算法Java实现(9)—— 线性排序之 基数排序算法...

    基数排序算法是计数排序的延伸,计数排序会造成很大的空间浪费,但基数排序法是对位数进行排序,适合于位数之间相差较大的情况,废话不多说,直接上代码: 升序排序法: /** * 基数排序法 * 升序排列 * ...

  10. c++ 基数排序算法_基数排序算法– C / C ++实现的基础

    c++ 基数排序算法 Radix Sort Algorithm is a unique sorting algorithm that works on the basic principle of n ...

最新文章

  1. 如何使用 Druid 和 Kafka 构造 Kappa 架构完成流量分析
  2. linux i2c ioctl错误,关于读写I2C总线的时候出错的有关问题
  3. SharedPreferences的使用
  4. 从菜鸟到老鸟--Mac篇 [五]
  5. AOM Summit 来了
  6. 什么是RPA 现在都有哪些产品
  7. LeetCode 875. 爱吃香蕉的珂珂(二分查找)
  8. 创建unique时,约束和索引有何区别。唯一约束和唯一索引区别,选项忽略重复键作用
  9. 认识队列技术中的硬件队列和软件队列及如何改变硬件队列长度
  10. SpringMvc的 @Valid 拦截到的异常如何抛出
  11. windows CMD 下 长ping 加时间戳,亲测有效
  12. 海康威视网络摄像头Demo示例研究
  13. 侯晓迪:全身心的投入,吃住都在实验室
  14. shell+curl+fortune+pushplus–>每日一言
  15. 【Android】使用后端云Bmob实现登录、注册
  16. 两万文字多图详解常用软件工具使用(持续更新)
  17. java笔迹比对_[笔迹]java-其他
  18. 基于微信小程序的校园二手物品交易平台的设计与实现-计算机毕业设计源码+LW文档
  19. PyCharm运行按钮是灰色的
  20. linux 传输文件stpf,在Linux下搭建 miniGUI mStudio环境...-linux 全面剖析ps命令-纯Servlet实现文件上传_169IT.COM...

热门文章

  1. git使用---工作区和暂存区
  2. Makefile学习(二)[第二版]
  3. 数据库之间数据转换最快方法
  4. sencha touch 手势识别左右滑动
  5. Java -- 网络编程(一):Client与Server之间的数据传送
  6. 如何实现从wgs-84到beijing54的坐标转换
  7. vue项目配置eslint(附visio studio code配置)
  8. freemarker常见语法大全
  9. PYPL 4 月排行:Python 最流行,Java 还行不行?
  10. Istio流量管理实践之(5): 使用cert-manager部署Istio自定义入口网关及进行证书管理...