JavaScript Switch 桶排序

算法详解

桶排序或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。

算法描述


桶排序利用函数的映射关系,减少了几乎所有的比较工作。实际上,桶排序的f(k)值的计算,其作用就相当于快排中划分,已经把大量数据分割成了基本有序的数据块(桶)。然后只需要对桶中的少量数据做先进的比较排序即可。

代码:

  1. 根据数组中数字的最大值 建立对应数量的桶(遍历时js会自己创建对应数量);
  2. 再根据数组中的每一项数字,把这些数字当做桶的对应索引,给这些索引的桶加水;
  3. 遍历一遍所有的桶,从左到右检索把有水的桶的下标列出来即可

    <script type="text/javascript">



        var arr = [3,2,5,10,7];

        // bocket 承载下标的容器(桶)

        var bocket = [];

        for(var i = 0; i < arr.length ; i++){

            // arr[i]是需要排列的数字

            // console.log(arr[i]);

            // 让arr中的每一个值arr[i],当做桶里的索引,这些下标是需要加水的

            // 赋值为1的意思是加水:需要随意填一个数据,这个数据是什么不重要

            bocket[arr[i]] = 1; 

        }

        console.log(bocket);

        // 取出索引 先清空原数组,再将排好序的元素push进去

        arr.length = 0;

        // 去遍历这个桶,列出加水的

        for(var attr in bocket){

            // for in之中的取出的attr是字符串,所以要转换

            arr.push(Number(attr));

        }

        console.log(arr);





    </script>

这是我所学到的,所以我要分享给你们,希望可以帮助到你们。

以上就是我的分享,新手上道,请多多指教大神勿喷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值