zoukankan      html  css  js  c++  java
  • 向Array中添加归并排序

    归并排序思路

    1) 归并

    从两个有序表R[low...mid]和R[mid+1...high],每次从左边依次取出一个数进行比较,将较小者放入tmp数组中,最后将两段中剩下的部分直接复制到tmp中。

    这样tmp是一个有序表,再将它复制加R中。(其中要考虑最后一个子表的长度不足length的情况)

    2) 排序

    自底向上的归并,第一回:length=1;第二回:length=2*length ...

    代码实现

    Function.prototype.method = function(name, func){
        this.prototype[name] = func;
        return this;
    };
    
    Array.method('merge', function(low, mid, high){
        var tmp = new Array(), i = low, j=mid+1, k=0;
        while(i<=mid && j<=high){
            if(this[i] <= this[j]){//比较第一部分和第二部分,取较小者
                tmp[k] = this[i];
                i++;
                k++;
            }else{
                tmp[k] = this[j];
                j++;
                k++;
            }
        }
        while(i<=mid){
            tmp[k] = this[i];
            i++;
            k++;
        }
        while(j<=high){
            tmp[k] = this[j];
            j++;
            k++;
        }
        for(k=0,i=low; i<=high; k++,i++) this[i] = tmp[k];
    
        return this;
    });
    Array.method('mergePass', function(length, n){
        var i;
        for(i=0; i+2*length-1<n; i=i+2*length) this.merge(i, i+length-1, i+2*length-1);
        if(i+length-1 < n) this.merge(i, i+length-1, n-1); //考虑到最后一个子表的长度可能小于length,所以要特殊处理一下
    
        return this;
    });
    
    Array.method('mergeSort', function(){
        var len = this.length,
            length;
        for(length=1; length<len; length=2*length) this.mergePass(length, len);
    
        return this;
    });
  • 相关阅读:
    Pytorch使用tensorboardX实现loss曲线可视化。超详细!!!
    numpy安装失败:numpy和cv2的版本不一样吧 pip安装/卸载
    问题解决:RuntimeError: CUDA out of memory.(....; 5.83 GiB reserved in total by PyTorch)
    前端刷题网站
    vscode如何使用ssh连接远程linux
    marginnote使用
    前端知识点
    HTTP状态码
    内置对象总结
    微信小程序
  • 原文地址:https://www.cnblogs.com/JChen666/p/3360344.html
Copyright © 2011-2022 走看看