读书笔记-《数据结构与算法》-摘要8[桶排序]

桶排序和归并排序有那么点点类似,也使用了归并的思想。大致步骤如下:

  1. 设置一个定量的数组当作空桶。
  2. Divide - 从待排序数组中取出元素,将元素按照一定的规则塞进对应的桶子去。
  3. 对每个非空桶进行排序,通常可在塞元素入桶时进行插入排序。
  4. Conquer - 从非空桶把元素再放回原来的数组中。
java 复制代码
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) {
        // 获取数组中的最大值和最小值
        int max = getMax(arr);
        int min = getMin(arr);

        // 计算桶的数量
        int bucketCount = (max - min) / arr.length + 1;

        // 创建桶列表
        List<List<Integer>> buckets = new ArrayList<>(bucketCount);
        for (int i = 0; i < bucketCount; i++) {
            buckets.add(new ArrayList<>());
        }

        // 将数组中的每个元素放入对应的桶中
        for (int num : arr) {
            int index = (num - min) / arr.length;
            buckets.get(index).add(num);
        }

        // 对每个桶中的元素进行排序,并将结果合并到原数组中
        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;
    }
}

(图网,侵删)

相关推荐
炽烈小老头2 分钟前
【 每天学习一点算法 2026/04/22】四数相加 II
学习·算法
alphaTao17 分钟前
LeetCode 每日一题 2026/4/20-2026/4/26
算法·leetcode·职场和发展
Robot_Nav1 小时前
TD3 —— 双延迟深度确定性策略梯度算法文献解读
算法·td3·drl
斯维赤1 小时前
每天学习一个小算法:归并排序
学习·算法·排序算法
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:区间覆盖(加强版)
c++·算法·贪心·csp·信奥赛·区间贪心·区间覆盖(加强版)
碧海银沙音频科技研究院1 小时前
杰理项目开发大全课程
人工智能·深度学习·算法
风一样的航哥2 小时前
LeetCode 2615 等值距离和:前缀和优化O(n)解法深度解析
数据结构·算法·leetcode
生成论实验室2 小时前
生成态势猜想:一种统一的宇宙动力学语法
人工智能·科技·神经网络·算法·信息与通信
旖-旎2 小时前
深搜(二叉树的所有路径)(6)
c++·算法·leetcode·深度优先·递归
啦啦啦_99992 小时前
3. KNN算法之 常用的距离度量方式(欧式&曼哈顿&切比雪夫&闵式距离)
算法