zoukankan      html  css  js  c++  java
  • 小白懂算法之桶排序

    一.桶排序简介

      桶排序是常见排序算法中最快的一种,大多数情况下比快排和归并排序还要快,但是也非常消耗空间,典型的以空间换时间,基本上是最耗内存的一种排序算法。

    二.算法原理

      桶排序是需要准备一组空桶,可以用一维数组来代替。空桶的长度是 待排序数组中最大数+1;待排序数组中元素值A放到桶数组的下标为A的位置,元素值B放到桶数组的下标为B的位置,依次类推。但考虑到一个位置上只能存放一个数,所以这个存放的数实际是记录着元素的出现个数。

    三.代码实现(Java实现)

        public static void main(String[] args) {
            //创建一个无序数组
            int[] arr = new int[] {2,1,5,3,8,3,19,13,2};
            
            //创建一组空桶,长度为arr中最大数+1
            int[] bucket = new int[20];
    
            //调用桶排序方法进行排序
            BuckeSort(arr,bucket);
            
            //遍历打印 数组的结果
            for(int i=0;i<arr.length;i++) {
                System.out.print(arr[i]+" ");
            }
            
        }
    
        private static void BuckeSort(int[] arr, int[] bucket) {
            /**
             *     实现思路:
             *         打个比方:
             *             >arr[0] = 6 ,那bucket[6] 就+1,代表在bucket[6]有一个6了
             *             >如果arr[2] = 6,那bucket[6]就再+1,此时bucket[6] =2,代表存放了两个6
             *             >依次推理
             *         遍历arr,记录元素在对应桶出现的次数
             *         遍历bucket,当bucket的元素>=1,那么该元素的下标值加入到arr中
             */
            
            for(int i=0;i<arr.length;i++) {
                bucket[arr[i]]++;    //arr[i]是作为bucket的下标值
            }
            
            int t=0;    //t记录arr下标
            for(int j=0;j<bucket.length;j++) {    //遍历桶
                for(int k=1;k<=bucket[j];k++) {    //若桶中元素是大于1的
                    arr[t++] = j;    
                }
            }
            
        }
  • 相关阅读:
    【java编程】使用System.getProperty方法,如何配置JVM系统属性
    【java多线程】CountDownLatch
    【java多线程】ConcurrentLinkedHashMap
    【java编程】ServiceLoader使用看这一篇就够了
    【JVM】java对象
    【git】Git常用命令
    centos7安装配置mysql5.7
    第十三章 redis-cluster原理
    《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记
    第二章 BIO与NIO
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13996513.html
Copyright © 2011-2022 走看看