归并排序

let arr1=[5,7,5,8,1,2,9,10,51,12,18,9,10,2,5];

function sor1(arr,l,r){
    if(l==r){
        return;
    }
    let mid= Math.floor((l+r)/2);
    sor1(arr,l,mid);
    sor1(arr,mid+1,r);
    merge(arr,l,mid,r)
    return arr;

}

function merge(arr,l,m,r){
    let i=0,
    help=[], //辅助数组
    p1=l,p2=m+1;
    while(p1<=m &&p2<=r){
        help[i++]=arr[p1]<arr[p2]?arr[p1++]:arr[p2++];
    }
    while(p1<=m ){
        help[i++]=arr[p1++];
    }
    while(p2<=r){
        help[i++]=arr[p2++];
    }
    for(i=0;i<help.length;i++){
        arr[l+i]=help[i];
    }
    return arr;
}

let len=arr1.length-1;
let b=sor1(arr1,0,len);
console.log(b);

 

posted @ 2020-05-25 10:22  apple78  阅读(100)  评论(0)    收藏  举报