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

    桶排序:通常用于少量整数的排序,当然也可存在于类似map这种键和值可以类型相同的排序中。

    需要排序的数组a,另一个长度为排序数组a元素最大值、每一个元素的初始值为0的数组b,通过循环遍历数组a,每当数组a的元素出现,该元素值所对应的b数组的下标,其元素值做加1。直到遍历完成,数组b元素的值就是下标对应的a数组的元素出现的次数。这种排序在做b数组下标输出时,还需判断次数是否为0.所以只适合以整数类型为元素的少量输出排序。注:其他类型数组可以考虑map这类集合作为b数组承载。

     1 //桶排序
     2 
     3 /**
     4  * 主方法
     5  * @param {*} arr 
     6  */
     7 function barrel_sort(arr) {
     8     const NumberArr = [1, 3, 1, 6, 5, 5, 4, 8, 9, 9, 5];
     9     display(resolve_count(init_Array(NumberArr.length), NumberArr));
    10 }
    11 
    12 /**
    13  * 初始化所有值为0的一个数组,传入参数为数组长度
    14  * @param {*} length 
    15  * @returns arr
    16  */
    17 function init_Array(length) {
    18     let arr = new Array(length);
    19     return arr.fill(0); //填充数组并返回修改后的数组
    20 }
    21 
    22 /**
    23  * 对每个只出现的次数作为对应桶的值
    24  * @param {*} arr 桶数组
    25  * @param {*} NumberArr 排序输出数组
    26  */
    27 function resolve_count(arr, NumberArr) {
    28     NumberArr.forEach(element => arr[element]++); //每个元素都会执行一次
    29     return arr;
    30 }
    31 
    32 /**
    33  * 对每个桶进行打印
    34  * @param {*} arr 
    35  */
    36 function display(arr) {
    37     arr.forEach((element, index) => {
    38         while (element) {
    39             console.log(index);
    40             element--;
    41         }
    42     });
    43 }
  • 相关阅读:
    python3 -- 堆(heapq)
    二叉堆的实现(最大堆)
    解决layui layer.load() Ajax提交时,只在结束闪一下
    两个for循环嵌套,写成一个列表生成式
    time模块,计算当前时间和时间差
    私有化&property
    面向对象魔术方法之__str__()方法
    面向对象魔术方法-__del__()方法
    面向对象之魔术方法__init__()和__new__()
    Django的自定义标签
  • 原文地址:https://www.cnblogs.com/huanqiuxuexiji/p/9163550.html
Copyright © 2011-2022 走看看