• js排序算法04——归并排序


    归并排序是一种分治算法。思想是把原数组切分成较小的数组,直到每个小数组只有一个位置,再将小数组归并成较大的数组,直到最后有一个完整有序的大数组。

    js实现如下:

    function mergeSort(arr){
        if(arr.length==1){
            return arr;       //长度为1直接返回
        }
        else if(arr.length==2){
            var ar0=arr[0];
            var ar1=arr[1];
                arr[0]=ar0<=ar1?ar0:ar1;
                arr[1]=ar0>ar1?ar0:ar1;         //长度为2,返回排好序的数组
        }
        else{
            var mid = Math.floor(arr.length/2);
            var left=mergeSort(arr.slice(0,mid));
            var right=mergeSort(arr.slice(mid,arr.length));    //递归
            var result=[];
            var il=0;
            var ir=0;
            while(il<left.length&&ir<right.length){
                if(left[il]<=right[ir]){
                    result.push(left[il++]);
                }
                else{
                    result.push(right[ir++]);
                }
            }                       //合并
            while(il<left.length){
                result.push(left[il++]);
            }                       //左边的数组未拍完,直接添加在数组末尾
            while(ir<right.length){
                result.push(right[ir++]);
            }                       //右边的数组未拍完,直接添加在数组末尾
            //以上两个至多有一个会发生
            return result;  
        }
    }

    归并排序是一种稳定排序,无论最好情况和最坏情况时间复杂度为O(nlogn),空间复杂度为O(n)。

    附:T(n)=2T(n/2)+cn;

    T(n)=4T(n/4)+2cn;

    T(n)=8T(n/8)+3cn;

    n=2^k;

    k=logn;

    T(n)=2^kT(n/2^k)+kcn;

    T(n)=nT(1)+cnlog2n;

  • 相关阅读:
    webgl glsl
    javascript 分号理解
    流的理解 1
    javascript 排序
    phaser3 微信小游戏若干问题
    layabox 3d 入手
    phaser2 微信小游戏入手
    取整你知道几中办法?
    script 执行的三种方式
    cl查看类的内存布局
  • 原文地址:https://www.cnblogs.com/renbo/p/8284621.html
Copyright © 2020-2023  润新知