zoukankan      html  css  js  c++  java
  • Bucket Sort

    桶排序

    public class Bucket {
        /**
         * 桶排序
         * 给定元素范围可以使用桶排序,虽然空间复杂度大,但是时间复杂度仅为O(n)
         *
         * @param arr
         */
        public static void bucketSort(Integer[] arr) {
            Integer[] bucket = new Integer[21]; //针对于元素范围是0-20的元素
            for (int i = 0; i < bucket.length; i++) {
                bucket[i] = 0;
            }
            for (int i = 0; i < arr.length; i++) {
                bucket[arr[i]]++;
            }
            for (int i = 0, pos = 0; i < bucket.length; i++) {
                for (int j = bucket[i]; j > 0; j--) {
                    arr[pos++] = i;
                }
            }
        }
    
        //交换数组中的两个元素
        public static void swap(Object[] arr, int i, int j) {
            Object temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    
        //打印数组
        public static <T extends Comparable<? super T>> void printArray(T[] arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + " ");
            }
            System.out.println();
        }
    
        public static void main(String[] args) {
            Integer[] arr = {5, 1, 9, 7, 3, 10, 2, 8, 6, 4};
            bucketSort(arr);
            printArray(arr);
        }
    }

    桶排序--例题

    public class Bucket {
        /**
         * 桶排序
         * 给定元素范围可以使用桶排序,虽然空间复杂度大,但是时间复杂度仅为O(n)
         * 例题:请设计一个复杂度为O(n)的算法,计算一个未排序数组中排序后相邻元素的最大差值。
         * 给定一个整数数组A和数组的大小n,请返回最大差值。保证数组元素个数大于等于2小于等于500。
         * 测试样例:
         * [9,3,1,10]
         * 返回:6
         *
         * @param arr
         */
        public static void bucketSort(Integer[] arr) {
            Integer[] bucket = new Integer[21]; //针对于元素范围是0-20的元素
            for (int i = 0; i < bucket.length; i++) {
                bucket[i] = 0;
            }
            for (int i = 0; i < arr.length; i++) {
                bucket[arr[i]]++;
            }
            for (int i = 0, pos = 0; i < bucket.length; i++) { //这里虽然是双重循环,但时间复杂度并不是O(n^2),而是O(n)
                for (int j = bucket[i]; j > 0; j--) {
                    arr[pos++] = i;
                }
            }
        }
    
        //获取相邻元素的最大差值
        public static Integer getMax(Integer[] arr) {
            int max = 0;
            for (int i = 0; i < arr.length - 1; i++) {
                max = (arr[i + 1] - arr[i]) > max ? (arr[i + 1] - arr[i]) : max;
            }
            return max;
        }
    
        //交换数组中的两个元素
        public static void swap(Object[] arr, int i, int j) {
            Object temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    
        public static void main(String[] args) {
            Integer[] arr = {9, 3, 1, 10};
            bucketSort(arr);
            System.out.println(getMax(arr));
        }
    }
    

      

  • 相关阅读:
    javascript 对象只读
    异步IO
    模板
    Web框架
    WSGI接口
    web开发发展历程
    python函数中的参数类型
    学习网址
    python inspect模块
    详解python的装饰器decorator
  • 原文地址:https://www.cnblogs.com/Hangtutu/p/8022449.html
Copyright © 2011-2022 走看看