zoukankan      html  css  js  c++  java
  • js简单排序

    js排序在日常中用的比较少,一般都是后台直接从数据库获取数据的的时候就排好了,不过也可以了解一下基础的排序。

    1、冒泡排序,简单说就是让每个数与其他数依次比对,一般是从第一个数开始的,特点是简单容易理解,缺点是适合数量较少的排序,性能一般。

        var times=0;
        arr=[5,2,4,1,7,3,8,6,9,0];
        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;
                    }
                    console.log(""+(++times)+"次排序后:"+arr);
                }
            }
            return arr;
        };
        console.log("The result is:"+bubbleSort(arr));

    2、插入法排序,就是先假设第一个已近排好了序,然后依次往后对每个值与之前的进行对比找到合适的位置插入。循环次数少,适合少量的排序。

        arry=[5,2,4,1,7,3,8,6,9,0];
        var times=0;
        var insertSort=function(arr){
            for(var i =1,j;i<arr.length;i++){
                j=i;
                v=arr[j];
                while(arr[j-1]>v){
                    arr[j] = arr[j-1];
                    j--;
                    if(j == 0){
                        break;
                    }
                    console.log(1)
                }
                arr[j]=v;
                console.log(""+(++times)+"次排序"+arr)
    
            }
            return arr;
        }
        console.log(insertSort(arry));

    3、快速排序,主要就是循环取其中间设置的基准值进行比较,这个性能比较高,循环的次数少,但比第一个理解上稍微有些难度。

        arr=[5,2,4,1,7,3,8,6,9,0];
    
        var times=0;
        var quickSort=function(arr){
            //如果数组长度小于等于1无需判断直接返回即可
            if(arr.length<=1){
                return arr;
            }
            console.log("现在的数组"+arr)
            var midIndex=Math.floor(arr.length/2);//取基准点
            var midIndexVal=arr.splice(midIndex,1);//取基准点的值,splice(index,1)函数可以返回数组中被删除的那个数arr[index+1]
    
            console.log("取基准点的值"+midIndexVal)
            console.log("基中"+midIndex)
            var left=[];//存放比基准点小的数组
            var right=[];//存放比基准点大的数组
            //遍历数组,进行判断分配
            for(var i=0;i<arr.length;i++){
                if(arr[i]<midIndexVal){
                    left.push(arr[i]);//比基准点小的放在左边数组
                }
                else{
                    right.push(arr[i]);//比基准点大的放在右边数组
                }
                console.log(""+(++times)+"次排序后:"+arr);
            }
            //递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1;
            return quickSort(left).concat(midIndexVal,quickSort(right));
        };
        console.log(quickSort(arr)); 

    4、js封装的sort(),不过这是根据字符编码的顺序进行排序,所以要对数组进行排序要传入相应的参数(必须是函数)

        var arry1=[1,5,6,4,8,4,5,5,40,4,50,7,4,55,6,5,444,5,4,4,2,4,5,7,8,8];
        function sortNumber(a,b)
        {
            return a - b;
            console.log(a-b)
        }
        console.log(JSON.stringify(arry1.sort(sortNumber)))//[1,2,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,7,7,8,8,8,40,50,55,444]

    a-b如果大于1则认为a在b后,小于1则认为a在b前面,等于的话就是返回0了,这个就是定义的排序规则,如果从大到小b-a就可以了。据了解 sort() 数量小于等于22的数组使用插入排序,大于22的数组使用快速排序(没有验证)

  • 相关阅读:
    Linux学习50 进程优先级、网络客户端工具、shell循环(续Linux学习49)
    Linux学习51 CentOS系统启动流程介绍
    Linux学习49 资源管理三板斧-htop、vmstat、dstat实战
    【Kafka】CAP理论以及CAP定律
    【Kafka】Flume整合Kafka
    【Kafka】配置文件说明
    【Kafka】JavaAPI操作
    【Kafka】Stream API
    【Kafka】Consumer API
    【Kafka】Producer API
  • 原文地址:https://www.cnblogs.com/yuanzhiguo/p/7600427.html
Copyright © 2011-2022 走看看