学习算法次日

桶排序升级

第一天的桶排序,其实有不少的局限性,传进来的数组中,只能是0~9的数字,若是是多位数的状况,就须要升级一下。算法

先举一个例子:

对数组[123,222,219]进行排序 数组

排序.png

解决思路:

咱们将多位数进行拆解,每位数的数字依旧是0~9,那么咱们仍是须要10个桶,只不过咱们的桶能够重复利用,有多少位就用多少次。上面的题,咱们的桶就用了3次。其中用到的原理。cdn

原理介绍:

  1. 高位数中数字大的,不管它低位数多小,它依旧大。(因此咱们要从低位开始进行排序)
  2. 从数字大的桶中先往出倒数据,那么大的数据必定是排在前面的。
  3. 上面的基础上,遇到相同数字进行压栈,那么大数字的必定先出来。

特色

  • 桶排序的数据要求是,全部数据的长度必须彻底同样,且已知。因此使用多少次,是常数项。
  • 桶排序属于稳定排序。 好比[22(1),22(2)],进行排序以后,确定是[22(1),22(2)]的顺序。
  • 这种桶排序的空间复杂度是O(1),10个桶
  • 这种桶排序的时间复杂度O(n),将全部的数组遍历一遍

口诀:

用桶排序,个位开始。blog

数字是几,几号桶接。排序

同等大小,顺序压栈。it

大桶先倒,必定最大。io

顺位后起,继续接桶。class

最高位完,完成排序。基础

局限

这种排序算法,虽然较以前的有些改进,可是它依旧有一些局限性。原理

  1. 若是咱们的数据中,只有100和101,那么咱们准备2个桶就能够完成排序,并不须要10个桶
  2. 若是咱们的数据是100~200之间的数,那么咱们之须要重复使用两次桶就能够了。

就上述状况,咱们就还能够避免没必要要的空间和时间的浪费。

相关文章
相关标签/搜索