排序演算法 桶排序和計數排序

2021-07-10 07:26:16 字數 1179 閱讀 9893

桶排序(bucket sort)或所謂的箱排序,也是一種排序演算法。

其工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序)。桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間(θ(n))。但桶排序並不是比較排序,他不受到o(n log n)下限的影響。

設定乙個定量的陣列當作空桶子;

尋訪序列,並且把專案乙個乙個放到對應的桶子去;

對每個不是空的桶子進行排序;

從不是空的桶子裡把專案再放回原來的序列中。

計數排序(counting sort)是一種穩定的線性時間排序演算法。

計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i的元素的個數。然後根據陣列c來將a中的元素排到正確的位置。

找出待排序的陣列中最大和最小的元素;

統計陣列中每個值為i的元素出現的次數,存入陣列 c 的第 i 項;

對所有的計數累加(從c中的第乙個元素開始,每一項和前一項相加);

反向填充目標陣列:將每個元素i放在新陣列的第c(i)項,每放乙個元素就將c(i)減去1。

/**

* created by lysongzi on 16/3/2.

* 計數排序

*/public

class

countsort

int len = max - min + 1;

//生成計數陣列

int count = new

int[len];

//開始計數

for (i = 0; i < arr.length; i++)

count[arr[i] - min]++;

for (i = 1; i < count.length; i++)

count[i] += count[i - 1];

//將排序結果存入result陣列中

for (i = arr.length - 1; i >= 0; --i)

result[--count[arr[i] - min]] = arr[i];

//將結果拷貝到arr

for (i = 0; i < result.length; i++)

arr[i] = result[i];

}}

維基百科

桶排序和計數排序

桶排序和計數排序 桶排序 bucket sort 或所謂的 箱排序,是乙個 排序演算法 工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的 排序演算法 或是以遞迴方式繼續使用桶排序進行排序 桶排序是 鴿巢排序 的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序...

演算法 桶排序思想 計數排序 基數排序 桶排序

二.基數排序 三.桶排序 桶排序的思想 量大但範圍最小 既能用陣列下標表示 整數 且 有很多是並列的 其他情況不一定比快速排序快。總結 include using namespace std const int m 50 const int scope 60 void main delete arr...

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

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