数据结构之简单版桶排序

码海映雪人
• 阅读 980
package com.mystudy.lx.sort.bucket;

/**
 * @author dalaoban
 * @create 2020-05-24-10:18
 * 桶排序简单版排序
 */
public class MyBucketSortTest01 {

    /**
     * 简化版桶排序实现思路
     * 1、准备一个装载排序数的桶(即一个int[],长度为排序数中最大的数+1)
     * 2、初始化排序桶(桶的下标代表排序数、桶中内容代表该数出现的次数、初始化为0)
     * 3、循环读取排序数将对应的数组下标元素每读到一次则+1
     * 4、循环读取排序桶、桶中的数目则代表下标元素打印的次数
     *
     * 具体需要写哪些方法:
     * 1、寻找排序数中最大值
     * 2、初始化数组的方法
     * 3、对待排序数组进行排序的方法
     * 4、打印按指定排序规定排好序的内容
     * @param args
     */

    public static void main(String[] args) {
        int[] sortNum={5,5,1,4,3};
        int maxNum = lookFormaxNum(sortNum);
        int[] sortBucket = initSortBucket(maxNum);
        sortArray(sortNum,sortBucket);
        printSortArray(sortBucket,true);
        System.out.println();
        printSortArray(sortBucket,false);

    }


    /**
     * 寻找待排序数组中的最大值
     * @param sortNum
     * @return
     */
    public  static int lookFormaxNum(int[] sortNum){
        //假设第一个元素为最大值
        int maxNum=sortNum[0];
        for(int i=1;i<sortNum.length;i++){
            if(sortNum[i]>maxNum){
                maxNum=sortNum[i];
            }
        }
        return maxNum;
    }

    /**
     * 返回初始化好排序桶,全部初始化为0
     * @return
     */
    public static int[] initSortBucket(int maxNum){
        int[] sortBucket=new int[maxNum+1];
        return sortBucket;
    }

    /**
     * 对待排序数组进行排序的方法
     * 按循序对排序桶中下标为该元素的排序桶中的内容+1
     * @param sortNum
     * @param sortBucket
     */
    public static void sortArray(int[] sortNum, int[] sortBucket){

        //1、循环带排序素组将对应下标为该元素的内容+1
        for(int i=0;i<sortNum.length;i++){
            sortBucket[sortNum[i]]++;
        }
    }

    /**
     * 按指定规则进行打印
     * @param sortBucket 排序桶
     * @param isAsc 代表是否升序排列
     */
    public static void printSortArray(int[] sortBucket, boolean isAsc ){
        //降序排列
        if(!isAsc){
            System.out.print("降序排列为:"+'\t');
            /*
            * 从排序桶数组下标最大的位置开始读取
            * sortBucket[i]代表下标为i的元素出现了几次(即出现几次则打印几次)
            * */
            for (int i=sortBucket.length-1;i>0;i--){
                //sortBucket[i]代表下标为i的元素出现了几次(即出现几次则打印几次)
                for(int j=0;j<sortBucket[i];j++){
                    System.out.print(i+"\t");
                }
            }
        }else {
            System.out.print("升序排列为:"+'\t');
            for (int i=1;i<sortBucket.length;i++){
                //sortBucket[i]代表下标为i的元素出现了几次(即出现几次则打印几次)
                for(int j=0;j<sortBucket[i];j++){
                    System.out.print(i+"\t");
                }
            }
        }
    }
}


点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
22 22
4年前
【排序算法动画解】简单选择排序
本文为系列专题的第13篇文章。1.2.3.4.5.6.7.8.9.10.11.12.在文章【】中,我们介绍了暴力排序和冒泡排序这两种排序算法,算是一个引子。同时指出暴力排序和冒泡排序的缺点硬伤。本文介绍的简单选择排序则“医治”了上面提到的暴力排序和冒泡排序的“硬伤”。核心思想:从数组的第一个元素开始,将其作为基准元素,然后找出基准
Wesley13 Wesley13
3年前
java中几种排序的实现
1.最简单的冒泡排序/\\\冒泡排序\/publicstaticvoidbubbleSort(){int\\arr{5,8,1,2,9,8,7,4};System.out.println("排序前的数组为:");for(intnum:arr){System.o
似梦清欢 似梦清欢
2年前
排序算法(简单选择、堆排序、归并)
简单选择排序:::tip简单选择排序原理:将未排序的数组中从前向后遍历,找到最小的元素和数组中第一个元素交换位置,此时数组中第一个元素位置已经确定,再将未排序的数组中从前向后遍历,找到最小的元素和数组中第二个元素交换位置,依次向下。:::需要两层循环,外层
22 22
4年前
【排序算法动画解】直接插入排序
本文为系列专题的第14篇文章。1.2.3.4.5.6.7.8.9.10.11.12.13.前面介绍了已经介绍了三种排序,暴力排序、冒泡排序和简单选择排序,一个共同点都是基于交换。我们可以用另一种视角来看待排序,即将一个待排序的数组看成两个部分:有序区和乱序区。在排序开始前,整个数组都是乱序区,而有序区则为空:排序开始后,有序区
Wesley13 Wesley13
3年前
mysql 数据库group by 按排序取值
mysql数据库groupby按排序取值 mysql5.7以后,groupby想要按照排序的顺序来取值,在子结果集中要有union,groupby等操作,不然按照id默认排序来取值示例:数据库:score表id user\_id num1 100     952 100     963
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
JavaScript常用基础算法
基础算法一、排序1.冒泡排序//冒泡排序functionbubbleSort(arr){for(vari1,lenarr.length;i<len1;i){for(varj0;j<
菜园前端 菜园前端
2年前
什么是冒泡排序
原文链接:什么是冒泡排序(bubbleSort)?冒泡排序是所有排序算法中最简单的一种,当然也是性能最差的一种。冒泡排序的思想其实很简单,就如它的名字一样在水中"冒泡"。水中有很多散乱的小气泡,然后一个个气泡往水面上冒出。例如一组无序的数组,最左边就是水底
码海映雪人
码海映雪人
Lv1
故国伤心,新亭泪眼,更洒潇潇雨。
文章
4
粉丝
0
获赞
0