js数组冒泡排序、快速排序、插入排序

1、冒泡排序

     //第一种
     function bubblesort(ary){
        for(var i=0;i<ary.length-1;i++){
            for(var j=0;j<ary.length-1-i;j++){
                if(ary[j] > ary[j+1]) {//如果前面的数据比后面的大就交换
                    var items = ary[j];
                    ary[j] = ary[j+1];
                    ary[j+1] = items;
                }
            }
        }
        return ary;
    }
    var ary=[2,5,4,1,6,3];
    console.log(bubblesort(ary));
    //第二种
    var bubbleSort=function(arr){
        for(var i=0;i<arr.length-1;i++){
            for(var j=i+1;j<arr.length;j++){
                if(arr[i]>arr[j]){//如果前面的数据比后面的大就交换
                    var temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        return arr;
    }
    var arr=[2,5,4,1,6,3];
    console.log(bubbleSort(arr));

2、快速排序

// 数组快速排序的原理 : 获取数组的中间项,然后对数组进行循环,判断数组每一项和这个中间项进行比较,比中间项小的放在左边数组,比中间项大的放进右边的数组;然后通过递归对左边数组右边数组进行同样的处理,最后把每一个数组和中间项拼接在一起;
    function quickSort(ary) {
        // 当数组长度为一时,不需要再递归
        if(ary.length<=1){
            return ary;
        }
        // 计算中间项的索引,偶数项取中间两项后面一项,奇数项取中间项
        var index = Math.floor(ary.length/2);
        // splice  : 返回值是一个数组,通姑索引获取中间项
        var middle = ary.splice(index,1)[0];
        var  left = [];
        var  right = [];
        for(var i=0;i<ary.length;i++){
            var cur = ary[i];
            if(cur<middle){
                left.push(cur);
            }else{
                right.push(cur);
            }
        }
        return quickSort(left).concat(middle,quickSort(right));
    }

3、插入排序

function insertSort(ary){
        var newAry= [];
        newAry.push(ary[0]);
        for(var i=1;i<ary.length;i++){
            var cur = ary[i];
            for(var j=newAry.length-1;j>=0;){
                if(cur<newAry[j]){
                    j--;
                    if(j===-1){
                        newAry.unshift(cur);
                    }
                }else{
                    newAry.splice(j+1,0,cur);
                    break;
                }
            }
        };
        return newAry;
    }

 

posted @ 2017-11-19 17:22  前端学堂  阅读(838)  评论(0编辑  收藏  举报