桶排序

参考http://www.cnblogs.com/hapjin/p/5534262.html

桶排序感觉很好理解,也不精深,但是很清奇,简直是各种排序算法里的一股清流,我觉得这种奇特的排序方式也可以提醒自己解决问题的办法有时候就是那么简单直接,不要弯弯绕

排序原理,比方说有个数组[5,8,3,8],要给他们排序,那么就定一个0~9的数组(长度是10,不是4),然后从0到9循环,如果序号和数组里的数相等,就把这个序号对应的值+1;然后再循环一遍0-9,输出每个序号,序号里的值是多少就输出几次。

直接看代码

bucketsSort([5,8,3,8]);

function bucketsSort(arr){
    var sortArr = [];
    for(var j = 0; j < 10; j++){
        sortArr.push(0);//填充100
    }
    for(var i = 0; i < arr.length; i++){
        sortArr[arr[i]]++;
    }
    printout(sortArr);
}

function printout(sortArr){
    for(var k = 0; k < sortArr.length; k++){
        for(var m = 0; m < sortArr[k]; m++){
            console.log(k);
        }
    }
}

代码写的不好看,冗余比较多,就看个思路

如果是要根据对象里的某个属性进行,就相对麻烦些

var obj1={age:5,name:'a'},
obj2={age:8,name:'b'},
obj3={age:3,name:'c'},
obj4={age:8,name:'d'};

bucketsSort([obj1,obj2,obj3,obj4]);

function bucketsSort(arr){
    var sortArr = [];
    for(var j = 0; j < 10; j++){
        sortArr.push([]);
    }
    for(var i = 0; i < arr.length; i++){
        sortArr[arr[i].age].push(arr[i]);//直接把obj放到桶里
    }
    printout(sortArr);
}

function printout(sortArr){
    for(var k = 0; k < sortArr.length; k++){
        for(var m = 0; m < sortArr[k].length; m++){
            console.log(sortArr[k][m]);
        }
    }
}

上面的代码是我自己写的,应该有更好的办法

感觉上由于桶排序的特性,只有对可以转化成数字的属性才能排序,可能我思路不开阔

记录一个参考文章里的开阔思路的方式,排序字符串(其实和排序位数多的数字是一样的思路),先排低位(先排高位应该也一样),低位有序以后,再排次低位,一路排到最高位。

比如[83,115,159,115],如果按最直接不拐弯的思路那就要1000个桶了,那就拐个弯,先排个位,排完是[83,115,115,159],再排十位,排完是[115,115,159,83],再排百位,排完是[83,115,115,159],不过我估计这代码写起来(尤其是对象属性的那种)可读性不咋地,权当一种思路

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值