桶排序 計數排序和基數排序

2021-09-10 04:19:15 字數 767 閱讀 4552

我們把時間複雜度為o(n)的排序演算法,稱為線性排序。意思是,排序時間和排序個數成正比。

桶排序就是說,我把n個數,分為m個桶,每個桶裡k個數,k = n/m。桶的大小順序已經定義好了。然後把桶區間裡的數字扔到桶裡。最後進行桶內快速排序。

所以桶的時間複雜度是o(m*k*log(n/m)),又因為k = n/m,所以o(n*log(n/m))

所以當n無限接近於m的時候,log(n/m)是乙個常量,所以桶排序的時間複雜度是o(n)

適用場景:最好是外部排序,就是資料存在外部磁碟中,資料量比較大,記憶體有限,不能將整個資料集讀到記憶體中。

資料最好分布均勻,不然在極端情況下時間複雜度就會退化到快速排序的時間複雜度o(nlogn)。

資料要比較方便的分桶,桶與桶之間有天然的大小順序。

計數排序是桶排序的一種特例。

我們以乙個資料集為例,(2,5,3,0,2,3,0,3)。

最小值是0,最大值時5,我們建立乙個大小為6的陣列,然後依次將其對應的個數填上去。

其實根據個數,我們就可以很容易的還原出原理的資料集是(0,0,2,2,3,3,3,5)。

這就是計數排序

基數排序是一種穩定排序演算法。為什麼要先這麼說呢,因為這就是他演算法內容之一。

以下圖為例

計數排序 桶排序和基數排序

當輸入的元素是 n 個 0 到 k 之間的整數時,它的執行時間是 n k 計數排序不是比較排序,排序的速度快於任何比較排序演算法。由於用來計數的陣列c的長度取決於待排序陣列中資料的範圍 等於待排序陣列的最大值與最小值的差加上1 這使得計數排序對於資料範圍很大的陣列,需要大量時間和記憶體。例如 計數排...

計數排序 桶排序和基數排序

當輸入的元素是 n 個 0 到 k 之間的整數時,它的執行時間是 n k 計數排序不是比較排序,排序的速度快於任何比較排序演算法。由於用來計數的陣列c的長度取決於待排序陣列中資料的範圍 等於待排序陣列的最大值與最小值的差加上1 這使得計數排序對於資料範圍很大的陣列,需要大量時間和記憶體。例如 計數排...

桶排序 基數排序 計數基數排序 Java

前面已經講述了很多排序演算法,但是他們的排序演算法都是基於兩個值之間的比較,通過決策樹的方法可以證明深度為d的二叉樹則最多有 一些好的排序演算法是可以達到時間複雜度是線性的,桶排序就是其中一種。比如有n個數,但是這些數的最大數不超過m。這個時候就可以定義乙個含有m個元素的陣列 初始值為0 然後遍歷n...