基数排序——简单理解

什么是基数排序


基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。


分类


基数排序——简单理解_第1张图片


举个“栗子”


基数排序——简单理解_第2张图片


算法执行步骤:


(1)遍历序列找出最大的数(为的是确定最大的数是几位数);

(2)开辟一个与数组大小相同的临时数组tmp;

(3)用一个count数组统计原数组中某一位(从低位向高位统计)相同的数据出现的次数;

(4)用一个start数组计算原数组中某一位(从最低位向最高位计算)相同数据出现的位置;

(5)将桶中数据从小到大用tmp数组收集起来;

(6)重复(3)(4)(5)直到所有位都被统计并计算过,用tmp收集起来;

(7)将tmp数组拷回到原数组中;


使用场景


  • 在某个数字可能很大的时候,基数排序没有任何性能上的优势,还会浪费非常多的内存。

  • 所以基数排序大多数情况下面只适用于下面的情景,一组数,这组数的最大值不是很大,更加准确的说,是要排序的对象的数目 和 排序对象的最大值之间相差不多。比如,这组数 1 4 5 2 2,要排序对象的数目是 5 ,排序对象的最大值也是 5. 这样的情况很适合。我们原来的排序的数,默认是以10为基数,现在,这个改进算法是这样的,我以最大的那个数为基数,这样,所有的数都是“个位数”,问题就简单了。


时间复杂度&空间复杂度&稳定性


  • 时间复杂度:O(N*digit)
  • 空间复杂度:O(N)
  • 稳定性:稳定

你可能感兴趣的:(【大数据】)