javascript中排序的方法

插入排序

原理:把元数组中的第一项拿出来放在新数组中,在对原数组进行循环和新数组中的每一项对比,如果原数组中的这一项比新数组中的每一项都小,则放到新数组中的第一项,相反这放在新数组最后。

var ary=[5,9,7,3,4,8,2];
    function paixu(ary){
        var newary=[];
        newary.push(ary[0]);
        console.log(newary);
        for(var i=1;i<ary.length;i++){
            for(var j=newary.length-1;j>=0;){
                if(ary[i]<newary[j]){
                    j--;
                    if(j===-1){
                        newary.unshift(ary[i]);
                    }
                }else{
                    newary.splice(j+1,0,ary[i]);
                    j=-1
                }
            }
        }
        return newary;
    }
    paixu(ary);
    console.log(paixu(ary));

快速排序

原理:把原数组的长度去中间值,之后把中间的那个值记录下来cur,之后把原数组中剩下的值循环和cur比较,如果大于cur就放在右边,小于就放在左边,之后再对左右两边的值进行快速排序,之后cur的两边的值是一个为止,结束排序。

<script>
    var ary=[19,14,11,18,16,15,17];
    function quicksort(ary){
        if(ary.length<=1){
            return ary;
        }
        var index= Math.floor(ary.length/2);
        var cur=ary.splice(index,1)[0];
        
        var left=[];
        var right=[];
        for(var i=0;i<ary.length;i++){
            ary[i]>cur?right.push(ary[i]):left.push(ary[i]);
        };
        return quicksort(left).concat([cur],quicksort(right));
    };
    console.log(quicksort(ary))
</script>

sort排序:只可以排数字

<script>
    var ary=[4,3,5,2,6,1];
    ary.sort(function(a,b){return a-b;});
    console.log(ary)
</script>

冒泡排序

原理:原数组中的第一个小于第二个,不做操作,如果第一个大于第二个,那么交换二者的位置

<script>
    var ary=[4,5,3,6,2,1,8];
    function sort(ary) {
        var flag=false;
        for(var i=0;i<ary.length-1;i++){
            for(var j=0;j<ary.length-i-1;j++){
                if(ary[j]>ary[j+1]){
                    ary[j]=ary[j]+ary[j+1];
                    ary[j+1]=ary[j]-ary[j+1];
                    ary[j]=ary[j]-ary[j+1];
                    flag=true;//只要本轮有交换的就让flag=true
                }
            }
            if(flag){//flag==true上一轮有交换的,继续执行下一轮 让flag从新的赋值false
                flag=false;
            }else{//上一轮没有交换,已经排好了,直接结束循环即可
                break;
            }
        }
        return ary;
    }
    console.log(sort(ary))
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值