Java | 桶排序

不爱生姜不吃醋⭐️
如果本文有什么错误的话欢迎在评论区中指正
与其明天开始,不如现在行动!

文章目录

  • 前言
  • 桶排序
    • 1.概念
    • 2.复杂度
    • 3.代码实现
  • 总结


前言

桶排序(Bucket Sort)又称箱排序,是一种比较常用的排序算法


桶排序

1.概念

其算法原理是将数组分到有限数量的桶里,再对每个桶分别排好序(可以是递归使用桶排序,也可以是使用其他排序算法将每个桶分别排好序),最后一次将每个桶中排好序的数输出。

2.复杂度

O(N)

3.代码实现

public class RadixSort {
    public static void main(String[] args) {
        int[] arr = {132, 645, 852, 642, 16, 23, 888, 666, 222, 668, 88888888};
        radixSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    private static void radixSort(int[] arr) {
        if (arr == null && arr.length < 2) {
            return;
        }
        radixSort(arr, 0, arr.length - 1, maxBits(arr));
    }

    private static void radixSort(int[] arr, int L, int R, int digit) {
        int radix = 10;
        int i = 0, j = 0;
        int[] bucket = new int[R - L + 1];
        for (int d = 1; d <= digit; d++) {
            int[] count = new int[radix];
            for (i = L; i <= R; i++) {
                count[getDigit(arr[i], d)]++;
            }
            for (i = 1; i < radix; i++) {
                count[i] += count[i - 1];
            }
            for (i = R; i >= L; i--) {
                j = getDigit(arr[i], d);
                bucket[count[j] - 1] = arr[i];
                count[j]--;
            }
            for (i = L, j = 0; i < bucket.length; i++, j++) {
                arr[i] = bucket[j];
            }
        }
    }

    private static int getDigit(int i, int d) {
        return (i / (int) (Math.pow(10, d - 1))) % 10;
    }

    private static int maxBits(int[] arr) {
        int num = Integer.MIN_VALUE;
        for (int i : arr) {
            num = Math.max(num, i);
        }
        int res = 0;
        while (num != 0) {
            res++;
            num /= 10;
        }
        return res;
    }
}

总结

文章中代码的编写使用的都是Java基础知识,多加练习熟能生巧。
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家!!!


你可能感兴趣的:(Java算法,Java基础案例,java,排序算法,算法,桶排序)