常见排序算法汇总与分析(下)(基数排序与计数排序)
转载请注明出处: http://blog.csdn.net/fightlei/article/details/52586814 本篇汇总的算法将不再是基于比较的排序算法,因此会突破这类算法的时间复杂度下界O(nlog 2 n)。如果有朋友对前面的内容感兴趣,可以先去看看 常见排序算法汇总与分析(中)(选择排序与归并排序) 我们先来总结基数排序算法,该算法在排序过程中不进行比较,而是通过“分配”和“收集”两个过程来实现的。 基数排序 【基本思想】 首先设立r个队列,对列编号分别为0~r-1,r为待排序列中元素的基数(例如10进制数,则r=10),然后按照下面的规则对元素进行分配收集 1,先按最低有效位的值,把n个元素分配到上述的r个队列中,然后从小到大将个队列中的元素依次收集起来 2,再按次低有效位的值把刚收集起来的关键字分配到r个队列中,重复收集工作 3,重复地进行上述分配和收集,直到最高有效位。(也就是说,如果位数为d,则需要重复进行d次,d由所有元素中最长的一个元素的位数计量) 为什么这样就可以完成排序呢? 以从小到大排序为例 首先当按照最低有效位完成分配和收集后,此时得到的序列,是根据元素最低有效位的值从小到大排列的。 当按照次低有效位进行第二次分配和收集后,得到的序列,是先根据元素的次低有效位的值从小到大排列,然后再根据最低有效位的值从小到大排列。 以此类推