演算法Algorithm 桶(Bucket)排序

2021-10-10 02:44:51 字數 1415 閱讀 5600

確定待排序數列(n個數)的最小值和最大值,確定桶的數量k;然後把這個n個數「均勻的」放到k個桶中;再對每個桶中的數列進行排序(可以使用其他排序演算法);最後依次讀取每個桶中的數就是排好序的整個數列。

使用乙個對映函式來達到把n個數放到k個桶的操作,其規則是「左側」桶(先放置的)中的數全部小於「右側」桶中的數列,即每個桶都有乙個取值範圍(如:第乙個桶存放1-5,第二個桶存放6-10),不在這個範圍的就是乙個空桶。

private static void main(string args) 

system.out.println("待排序陣列:" + arrays.tostring(arr));

sort(arr);

system.out.println("最終結果:" + arrays.tostring(arr));

}/**

* 排序演算法

** @param arr 待排序陣列

* @param bucketsize 乙個桶中存放的數量

*/private static void sort(int arr, int bucketsize)

if (arr[i] > max)

}// 如果最大值和最小值相等,說明整個待排序陣列就是同乙個數

if (min == max)

// 確定桶的數量

int count = (int) math.floor((max- min) / bucketsize) + 1;

// 定義桶;利用list可以防止不確定每個桶存放數的數量,也可以避免每次都要擴充陣列

list> bucket = new arraylist<>();

for (int i = 0; i < count; i++)

// 把待排序數列放到桶裡

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

// 對每個桶進行希爾排序

for (int i = 0; i < bucket.size(); i++)

}// 排列

int k = 0;

for (int i = 0; i < bucket.size(); i++)

}}/**

* 應用於每個桶中的排序演算法

*/private static void shellsort(integer arr, int left, int right)

int mid = (left + right) / 2;

shellsort(arr, left, mid);

shellsort(arr, mid + 1, right);

for (int i = left; i < right; i++) }}

}

時間複雜度

空間複雜度:o(n+k)

穩定性:穩定

資料探勘BUC演算法實現

根據給定的資料集,遞迴計算從0維到最大維的元組出現次數,若大於等於min sup,則加入結果,若小於min sup,則剪枝。舉個例子 資料集如下 a1,b1 a1,b2 a2,b1 a1,b2 min sup取2。0維到1維 從0 1維有a1,a2,b1,b2,四個元組。出現次數分別為a1 3,a2...

BUC冰川演算法的python實現

生成資料的方法 def datainit a a1 a2 a3 a4 a5 b b1 b2 b3 b4 c c1 c2 c3 d d1 d2 datalist for i in range 21 ax random.randint 0,4 bx random.randint 0,3 cx rando...

Algorithm 排序演算法

閒來無事回顧一下原來所學的排序演算法,包括冒泡 選擇 插入 希爾 快速 歸併排序,這六種。首先依次講解原理,最後放出實現及測試速度原始碼。我想大部分人學習的第乙個排序演算法就是這個。顧名思義,如泡泡般,越到水面就越大,即經過連續不斷的判斷,選取大 或小 的值進行交換,一輪結束後,未排序資料最後面的就...