大量数据常采用的高效排序算法:桶排序计数排序基数排序
Posted 一个程序员的取经之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大量数据常采用的高效排序算法:桶排序计数排序基数排序相关的知识,希望对你有一定的参考价值。
——几种线性排序算法
所谓线性排序算法,指的就是时间复杂度为线性的排序算法,即复杂度为O(n)。
内容目录
1. 桶排序1.1 桶排序1.2 桶排序的条件1.3 桶排序的使用场景2. 计数排序2.1 计数排序3. 基数排序3.1 基数排序
1. 桶排序
1.1 桶排序
桶排序的意思,就是将数据按照规则放在不同的桶内,最后从桶中取出数据,组成最终的排序序列。
对于给定的n个数据,统计其数据范围,将数据范围依次划分成m个区间,每个区间对应设置一个桶。将数据放到对应区间的桶内。假如每个桶内的数据数量相同,都是k=n/m,每个桶内的数据进行快速排序时间复杂度就是O(klogk)。整个桶排序的时间复杂度就是O(mklogk)。由于k=n/m,所以O(mklogk)=O(nlog(n/m))。当m和n比较接近时,O(nlog(n/m))=O(n)。
1.2 桶排序的条件
桶与桶之间本身就存在大小关系,这样在桶内部快速排序完毕后,对所有桶按照桶的大小依次遍历就能完成排序。
数据在各桶内的分布比较均匀,不存在某个桶数据特别多或者特别少的情况。
1.3 桶排序的使用场景
桶排序适合在外部排序(数据存储在外部磁盘,数据量比较大,远大于内存)中使用。内存远远小于排序的数据量的时候,将数据划分成内存能处理的大小,每一块为一个桶,进行桶内的快速排序,保存为文件。最后将各文件依次读取出来,得到排序后的数据。
2. 计数排序
2.1 计数排序
对正整数进行排序时,如果数据范围不是很大,每一个正整数对应一个区间,每个区间的数据个数就是这个正整数的出现次数。
这是特殊情况下的桶排序,即粒度为1的桶排序。
3. 基数排序
对于手机号码的排序,假如依次从高位往低位比较,如果高位能比较出大小,就不用看低位了。这种排序要求,可以用基数排序。
3.1 基数排序
对于相同长度k的数据的排序,从最低位开始排序,采用桶排序的方式,复杂度为O(n),再按照次低位用桶排序,再按照次次低位用桶排序。这样一共需要k次复杂度为)(n)的桶排序,T(n)=k*O(n)=O(n)。
如果数据不是等长的,可以用特定的数据补足,使之长度相等,但是需要数据补足后不影响排序。
以上是关于大量数据常采用的高效排序算法:桶排序计数排序基数排序的主要内容,如果未能解决你的问题,请参考以下文章