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的数组使用快速排序(没有验证)

原文地址:https://www.cnblogs.com/yuanzhiguo/p/7600427.html