桶排序的思想有點像計數排序,又有點像快速排序,還用到一點hash的東西,值得仔細琢磨。
具體做法如下,按照某種hash函式,將資料對映到不同的桶中,使用hash是因為我們要保證每個資料的對映過程應該在常數時間內完成。對映完成後,每個桶中的資料相比於其他桶都是有序的(也就是相鄰的桶有嚴格的順序),這個就有點像快速排序了(可以把那裡看成是兩個桶)。之後可以對每個桶內的資料用其他的排序方法排序。當然也可以對桶內的資料繼續進行桶排序,但如果hash函式選的好的話,桶內的資料直接採用其他的排序方法應該就能達到比較高的時間複雜度了。排序完畢後按照桶的順序依次輸出每個桶中的元素即可。**如下(假設資料範圍為[0,100)):
// bucketsort.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include #include #include #include #define bucket_num 10 //桶的數量
using namespace std;
void insersort(vector&a)
//桶內採用選擇排序
for (int i = 0; i < bucket.size(); i++)
insersort(bucket[i]);
vectorans;
for (int i = 0; i < bucket.size(); i++)
for (int j = 0 ; j < bucket[i].size(); j++)
ans.push_back(bucket[i][j]);
return ans;
}int main()
執行結果:
簡單桶排序
2020年即將過去,2021年即將到來。讓我們總結過去並且憧憬2021 希望大家在2021年理論與實際相結合 以下是簡單桶排序 題目 滿分十分有五個同學依次考5分,9分,1分,6分,5分,7分。把以上同學按照非遞減排序 使用簡單同排序 1 申請處理資料上限數字的桶數 對應下面程式中n 2 對申請的桶...
簡單的桶排序原理以及實現
今天學習的演算法,簡單桶排序。這遠遠稱不上桶排序演算法 所謂桶排序,就是將每個輸入的數放入它對應的桶中,最後再按照桶的順序從小到大或從大到小去逐一倒出來,這樣就實現桶排序了。下面我舉個例子,我要排範圍0 10的15個數。1 include 2 3using namespace std 45 intm...
最簡單的桶排序
問你乙個問題 現在有3 6 1 5 3 7 六個數字,你怎麼把它們從小到大排序呢?你肯定是找到最小的1拿出來,接著是3,一直到7對吧!1。準備桶 你得確定你排序的數字在哪個區域,比如說你要排序的數字中最大的是100 那你就得準備乙個a 101 的陣列,這裡就有102個桶了 2。排序 你要對3 6 1...