排序算法之桶排序

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

猜你喜欢

转载自www.cnblogs.com/huanqiuxuexiji/p/9163550.html