桶排序升級
第一天的桶排序,其實有不少的侷限性,傳進來的數組中,只能是0~9的數字,若是是多位數的狀況,就須要升級一下。算法
先舉一個例子:
對數組[123,222,219]進行排序 數組
解決思路:
咱們將多位數進行拆解,每位數的數字依舊是0~9,那麼咱們仍是須要10個桶,只不過咱們的桶能夠重複利用,有多少位就用多少次。上面的題,咱們的桶就用了3次。其中用到的原理。cdn
原理介紹:
- 高位數中數字大的,不管它低位數多小,它依舊大。(因此咱們要從低位開始進行排序)
- 從數字大的桶中先往出倒數據,那麼大的數據必定是排在前面的。
- 上面的基礎上,遇到相同數字進行壓棧,那麼大數字的必定先出來。
特色
- 桶排序的數據要求是,全部數據的長度必須徹底同樣,且已知。因此使用多少次,是常數項。
- 桶排序屬於穩定排序。 好比[22(1),22(2)],進行排序以後,確定是[22(1),22(2)]的順序。
- 這種桶排序的空間複雜度是O(1),10個桶
- 這種桶排序的時間複雜度O(n),將全部的數組遍歷一遍
口訣:
用桶排序,個位開始。blog
數字是幾,幾號桶接。排序
同等大小,順序壓棧。it
大桶先倒,必定最大。io
順位後起,繼續接桶。class
最高位完,完成排序。基礎
侷限
這種排序算法,雖然較以前的有些改進,可是它依舊有一些侷限性。原理
- 若是咱們的數據中,只有100和101,那麼咱們準備2個桶就能夠完成排序,並不須要10個桶
- 若是咱們的數據是100~200之間的數,那麼咱們之須要重複使用兩次桶就能夠了。
就上述狀況,咱們就還能夠避免沒必要要的空間和時間的浪費。