排序算法——桶排序


七、桶排序(Bucket Sort)

  要使桶排序正常運行,需要額外的信息:

  輸入A1,A2,...,AN必須只由小於M的正整數構成,即Ai<M。使用一個大小為M的數組result,初始化為全0。數組有M個單元,即M個桶(bucket)。 1 void bucketSort(vector<int> &a, const int maxVal 2 {

 3 //int result[maxVal] = { 0 };  4 /* 初始化桶 */  5 for (int i = 0; i < maxVal; i++)  6  {  7 result[i] = 0;  8  }  9 /* 讀入數據裝桶 */ 10 for (int i = 0; i < a.size(); i++) 11  { 12 result[a[i]]++; 13  } 14 /* 將桶中的每個數打印出來,出現幾次就打印幾次 */ 15 for (int i = 0; i < maxVal; i++)
16   
for (int j = 0; j < result[i]; j++) 17 { 18 cout << i << endl; 19 }
20
}

步驟:

  result[Ai]中存放的是Ai出現的次數;

       讀入Ai時,result[Ai]增1;  

  所有輸入數據讀入后,掃描數組result,打印出排序后的數據,result[Ai]值是n,Ai就打印n次.

eg.

       輸入數組{1,4,5,3,7,8,4,9,6,5,0},最大為9,另建一個大小為10的數組,初始化為全0。

讀入數組:

  遇到1,將result[1]加1

  遇到4,將result[4]加1

  ......

  遇到5,將result[5]加1

  遇到0,將result[0]加1

得到結果:

  

打印結果:

  0 1 3 4 4 5 5 6 7 8 9

 

時間復雜度:

  算法用時O(M+N),M為桶的個數,N為待排序數組的大小。

空間復雜度:

  O(M+N)

       如果輸入數據非常龐大,桶的數量會非常多,空間代價將會非常大。 

 

 

 

 

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM