排序算法之桶排序

本文介绍了桶排序的基本概念及其在整数排序中的应用。通过一个具体示例展示了如何使用桶排序来统计数组中各元素的出现频率,并给出了完整的桶排序算法实现。

桶排序:通常用于少量整数的排序,当然也可存在于类似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 }

 

转载于:https://www.cnblogs.com/huanqiuxuexiji/p/9163550.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值