• 小白懂算法之桶排序


    一.桶排序简介

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

    二.算法原理

      桶排序是需要准备一组空桶,可以用一维数组来代替。空桶的长度是 待排序数组中最大数+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;    
                }
            }
            
        }
  • 相关阅读:
    一个界面描述标签的想法
    使用MyGeneration创建模板:介绍(翻译)
    ICE:C#和Java共同的服务器
    Spring.NET 快速入门 (翻译)
    TSQL命令在SQLServer查询中的运用
    SQL数据库修复
    区分汉字和字母的函数
    如何生成静态页
    delphi 开发扩展(一)
    20072008
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13996513.html
Copyright © 2020-2023  润新知