JS实现桶排序(代码+讲解)

OK,最后再说一种排序,这一个篇章就结束了。

说到桶排序,它的思想就是把分治用到极致,把一个序列分为一个个同,然后对每个桶进行排序,最后再进行整合。

我们还是先用图解来进行对原理的解释,然后再用代码实现。
在这里插入图片描述

OK,桶排序的思想有了,我们来说一下原理:
第一步:确定这个序列要分为几个桶
第二步:把每个元素放到对应的桶里面
第三步:对每个桶进行排序
第四步:对所有的桶进行整合

现在我们用图来看一下,倘若我有这样一个序列
在这里插入图片描述

现在我们要确定桶的数量,如和确定呢,这里面有一个计算公式
桶的数量 = (最大值 - 最小值)/ 数组长度 + 1。

那这里面我们可以确定桶的数量为 49 / 13 +1 = 4;

现在我们再用另一个公式确定每个元素在哪个桶中
元素位置 =( 元素大小 - 最小值)/ 数组长度

OK,根据这个公式我们可以确定每个元素都在第几个桶里面
在这里插入图片描述
OK,现在我们再对每一个桶进行排序(这里面没有固定的排序算法)
在这里插入图片描述
对每个桶进行排序后最后我们进行整合,就变成了一个有序的序列。

在这里插入图片描述

OK,现在我们再用代码来实现一下:

    <script>
        function bucketSort(arr){
            let max = Math.max(...arr);
            let min = Math.min(...arr);
            let bucketNum = parseInt((max - min) / arr.length) + 1;

            let bucketArr = new Array(bucketNum);
            for(var i=0;i<bucketNum;i++){
                bucketArr[i] = new Array();
            }

            for(var i of arr){
                let num = parseInt((i-min) / arr.length);
                bucketArr[num].push(i);
            }
            for(var i of bucketArr){
                i.sort();
            }
            let k = 0;
            for(var i=0;i<bucketArr.length;i++){
                for(var j=0;j<bucketArr[i].length;j++){
                    arr[k++] = bucketArr[i][j];
                }
            }
        }


        let arr = [1,20,31,58,46,5,6,7,21,32,44,59];
        bucketSort(arr);
        console.log(arr);
    </script>

OK,关于桶排序,以及八个排序算法,也就全部都说完了!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值