桶排序和歸并排序有那么點點類似,也使用了歸并的思想。大致步驟如下:文章來源:http://www.zghlxwxcb.cn/news/detail-801768.html
- 設(shè)置一個定量的數(shù)組當作空桶。
- Divide - 從待排序數(shù)組中取出元素,將元素按照一定的規(guī)則塞進對應(yīng)的桶子去。
- 對每個非空桶進行排序,通??稍谌厝胪皶r進行插入排序。
- Conquer - 從非空桶把元素再放回原來的數(shù)組中。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class BucketSort {
public static void main(String[] args) {
int[] arr = {80, 50, 30, 10, 90, 60, 0, 70, 40, 20, 50};
System.out.println("Original array: " + Arrays.toString(arr));
bucketSort(arr);
System.out.println("Sorted array: " + Arrays.toString(arr));
}
public static void bucketSort(int[] arr) {
// 獲取數(shù)組中的最大值和最小值
int max = getMax(arr);
int min = getMin(arr);
// 計算桶的數(shù)量
int bucketCount = (max - min) / arr.length + 1;
// 創(chuàng)建桶列表
List<List<Integer>> buckets = new ArrayList<>(bucketCount);
for (int i = 0; i < bucketCount; i++) {
buckets.add(new ArrayList<>());
}
// 將數(shù)組中的每個元素放入對應(yīng)的桶中
for (int num : arr) {
int index = (num - min) / arr.length;
buckets.get(index).add(num);
}
// 對每個桶中的元素進行排序,并將結(jié)果合并到原數(shù)組中
int index = 0;
for (List<Integer> bucket : buckets) {
Collections.sort(bucket);
for (int num : bucket) {
arr[index++] = num;
}
}
}
private static int getMax(int[] arr) {
int max = arr[0];
for (int num : arr) {
if (num > max) {
max = num;
}
}
return max;
}
private static int getMin(int[] arr) {
int min = arr[0];
for (int num : arr) {
if (num < min) {
min = num;
}
}
return min;
}
}
(圖網(wǎng),侵刪)文章來源地址http://www.zghlxwxcb.cn/news/detail-801768.html
到了這里,關(guān)于讀書筆記-《數(shù)據(jù)結(jié)構(gòu)與算法》-摘要8[桶排序]的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!