zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    开发avr单片机网络资源
    c语言中各种数据类型的长度
    REPEAT_BYTE(x)宏
    如何快速掌握man手册的使用
    如何获取内核代码的变更信息说明
    min宏的学习
    Spring对jdbc支持
    切入点表达式
    XML方式实现AOP编程
    注解方式实现AOP编程
  • 原文地址:https://www.cnblogs.com/wu-web/p/7860414.html
Copyright © 2011-2022 走看看