意外了解到基數排序,發現這演算法太厲害了!
這種排序演算法的時間複雜度為θ(d(n+k)),其中n表示待排序列的規模,d表示待排序列的最大位數,k表示每一位數的範圍,這也是一種時間換空間的演算法。
我們看這個演算法的時間複雜度我們應該就可以猜出來,這個演算法適用於位數不多,待排序列最大位數不是特別大,每一位數的範圍不大的情況下(當然對於數字排序,每一位的範圍都是[0,9]),這時候排序速度非常快。
基數排序的思路是按照低位先排序,然後收集;再按照高位排序,然後再收集;依次類推,直到最高位。有時候有些屬性是有優先順序順序的,先按低優先順序排序,再 按高優先順序排序。最後的次序就是高優先順序高的在前,高優先順序相同的低優先順序高的在前。基數排序基於分別排序,分別收集,所以是穩定的。
至此,我們的基數排序就完成了。理解起來感覺很簡單。至於為什麼不是從高位到低位呢?我覺得實際上理解起來也很簡單:比如我們還是對上面的序列排序,第一輪我們對最高位排序,然後對十位排序的時候就把之前對最高位排序之後的有一定順序的序列給打亂了。因此從高位到低位排序是錯誤的。
那麼我們如何證明這種排序的正確性呢?我們可以使用歸納法:假設待排的n個數有d位,那麼n個數中的所有d-1位數已經排好序了,我們現在開始對第t位開始使用排序,有兩種可能的情況,如果n個數中的t位有相同的數,那麼我們應該假設之前排序是穩定的,對於相同的數,先出現的排在前面,後出現的排在後面。如果n個數中的第t位不相同,那麼我們對其再次進行計數排序。直到所有d位數都排好了。
通過我們的證明也可以看出,我們對基數排序中的每一位的排序演算法必須是穩定的。
演算法筆記 基數排序
基數排序是一種資料格式相關的演算法,適用範圍有限,當資料位數較小時,基數排序法的時間複雜度近似為o n 效率高於其它的穩定性排序演算法。1.演算法思想 以十進位制數為例,現將元素按個位出入一次基數桶,再按十位出入基數桶 直至按最高位出入基數桶,此時序列整體有序。2.時間複雜度 最好情況 o d n ...
演算法筆記 基數排序
基數排序是一種資料格式相關的演算法,適用範圍有限,當資料位數較小時,基數排序法的時間複雜度近似為o n 效率高於其它的穩定性排序演算法。1.演算法思想 以十進位制數為例,現將元素按個位出入一次基數桶,再按十位出入基數桶 直至按最高位出入基數桶,此時序列整體有序。2.時間複雜度 最好情況 o d n ...
排序 基數排序
基數排序 radix sort 是屬於 分配式排序 distribution sort 基數排序法又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用。排序思想 首先按照資料的最低位 個位 將資料分配到0 9...