线性时间排序(计数排序、基数排序、桶排序)
来源:互联网 发布:网络灯谜群会2015 编辑:程序博客网 时间:2024/06/06 00:00
转载:http://blog.csdn.net/luoshixian099/article/details/45043337
线性时间排序
前面介绍的几种排序,都是能够在复杂度nlog(n)时间内排序n个数的算法,这些算法都是通过比较来决定它们的顺序,这类算法叫做比较排序 。下面介绍的几种算法用运算去排序,且它们的复杂度是线性时间[线性时间指的就是O(n)]。
——————————————————————————————————————
1.计数排序
计数排序采用的方法是:对每个元素x,去确定小于x的元素的个数,从而就可以知道元素x在输出数组中的哪个位置了。
计数排序的一个重要性质是它是稳定的,即对于相同的两个数,排序后,还会保持它们在输入数组中的前后顺序,这也是下面基数排序的基础。
虽然复杂度比之间的算法减小了,但在算法实现过程中,它要求输入数组数据位于一个区间[0,k]内,因为要遍历数组,计算[0,k]间的每个数在输入数组中的个数,这也算是计数排序的缺点吧!
下面是调试的程序,可直接运行,详细过程看下《算法导论》
———————————————————————————————————
2.基数排序
这里必须保证每次排序是稳定的,即对相同的数据,输出的顺序必须与输入的顺序相同。
基数排序介绍
基数排序能达到线性的时间复杂度。基数排序的主要思路是,将所有待比较数值(注意,必须是正整数)
统一为同样的数位长度,数位较短的数前面补零. 然后, 从最低位开始, 依次进行一次稳定排序
所以这里的排序可以使用计数排序。
这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列.
为什么要从低位开始向高位排序?
如果要从高位排序, 那么次高位的排序会影响高位已经排好的大小关系. 在数学中, 数位越高,数位值对数的大小的影响就越大
为什么同一数位的排序子程序要使用稳定排序?
稳定排序能保证,上一次的排序成果被保留,十位数的排序过程能保留个位数的排序成果,百位数的排序过程能保留十位数的排序成果.
———————————————————————————————————————————————————————————————————————————
3.桶排序
- 五 线性时间排序(基数排序、计数排序和桶排序)
- 线性时间排序——计数排序,基数排序,桶排序
- 算法导论-- 线性时间排序(计数排序、基数排序、桶排序)
- 线性时间排序之计数排序,基数排序和桶排序
- 线性时间排序(计数排序/桶排序/基数排序)
- 线性时间排序--计数排序、基数排序、桶排序
- 线性时间排序(计数排序、基数排序、桶排序)
- 线性时间排序:计数排序、基数排序、桶排序
- 线性排序----计数排序, 基数排序, 桶排序
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- MIT:算法导论——5.线性时间排序:计数排序、基数排序以及桶排序
- 数据结构与算法——线性时间排序(计数排序、基数排序、桶排序)
- 算法导论 第8章 线性时间排序(计数排序、基数排序、桶排序)
- [算法学习]线性时间排序:计数排序、基数排序和桶排序
- 线性排序之基数排序,桶排序,计数排序
- 计数排序 (线性时间排序之基数排序,计数排序及java实现)
- 基数排序 计数排序 桶排序
- Mongoose 4.11 开始的问题 useMongoClient
- Spring+SpringMVC+Spring Data JPA完美整合
- 二十三种设计模式之备忘录模式
- 【转载】--同余定理
- zw版·全程图解Halcon控件安装(delphi2007版)
- 线性时间排序(计数排序、基数排序、桶排序)
- 项目管理idea+maven+git
- JavaScript中的继承详解
- [剑指offer]面试题58:二叉树中的下一个结点
- 论内存管理
- LeetCode 136. Single Number
- Faster R-CNN(~ RPN + Fast R-CNN)
- 基于express中间件 搭建小型服务器(随笔)
- MySQL_内、左右连接及外键