學習算法次日

桶排序升級

第一天的桶排序,其實有不少的侷限性,傳進來的數組中,只能是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之間的數,那麼咱們之須要重複使用兩次桶就能夠了。

就上述狀況,咱們就還能夠避免沒必要要的空間和時間的浪費。

相關文章
相關標籤/搜索