桶排序相信很多人都聽說過吧,無比經典的乙個排序演算法。
洛谷1177 排序
題目描述
將讀入的 n 個數從小到大排序後輸出。
輸入格式
第 1 行為乙個正整數 n。
第 2 行包含 n 個空格隔開的正整數 a[i],為你需要進行排序的數,資料保證了a[i]不超過10^9。
輸出格式
將給定的 n個數從小到大輸出,數之間用空格隔開。
輸入輸出樣例
輸入
542
451
輸出
124
45
說明提示
對於20% 的資料,有 n <= 10^3。
對於100% 的資料,有 n <=10^5 。
其實桶排序是由鴿巢排序推理過來的,實現起來其實就是以乙個範圍為乙個鴿巢,就是將a_min到a_max劃分成幾個範圍,之後把所有數放到相應的桶內,接著再分別對每個桶進行排序就行了。思路其實很簡單。
這裡再算一下演算法時間複雜度我們可以看到大概是o(n + m)級別的。
# include
# include
# include
# include
# include
using
namespace std;
const
int n_max =
100000
, m_max =
1000000
;const
int bucket_gap =
1000
;int n;
int a[n_max +10]
;vector <
int> bucket[m_max +10]
;void
bucketsort()
int bucket_num =
(a_max - a_min)
/ bucket_gap;
for(
int i =
0; i <= bucket_num; i++
) bucket[i]
.clear()
;for
(int i =
1; i <= n; i++
) bucket[
(a[i]
- a_min)
/ bucket_gap]
.push_back
(a[i]);
int tmp =0;
for(
int i =
0; i <= bucket_num; i++)}
intmain()
排序演算法 桶排序
桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不...
排序演算法 桶排序
2009 12 02 12 01 2817人閱讀 桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均...
排序演算法 桶排序
桶排序 bucket sort 或所謂的箱排序的原理是將陣列分到有限數量的桶子裡,然後對每個桶子再分別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 最後將各個桶中的資料有序的合併起來。排序過程 假設待排序的一組數統一的分布在乙個範圍中,並將這一範圍劃分成幾個子範圍,也就是桶 ...