代码之家  ›  专栏  ›  技术社区  ›  William Machado

自下而上的合并排序Javascript实现

  •  0
  • William Machado  · 技术社区  · 7 年前

    我很难理解如何翻译以下代码: Algorithmist

    转换为javascript。我在下面补充了我对代码的理解。我的代码每次都返回原始数组。我认为这是因为我仍然没有将数组正确地划分为“块”。

    function merge(list,arr1,arr2,blockSize){
    	var i=0, j=0, k=0,n=list.length;
     while (i < blockSize && j < n){
     	if(list[i]<arr1[i]){
    		arr2[k++]=list[i++];
    	}
    	else{
    		arr2[k++]=arr1[i++];
    	}
     }
     while(i<blockSize){
     	arr2[k++]=list[i++];
     }
     while(j<n){
     	arr2[k++]=arr1[j++]
     }
    }
    function mergeSort(list){
    	var j,k,blockSize,w,
    	n=list.length;
    	for(blockSize=1;blockSize<n;blockSize*=2);
    	if(blockSize!=n){
    		return list;
    	}
    	else{
    		w= new Array(n);
    		for(k=1;k<n;k*=2){
    			for(j=0; j<(n-k); j+=2*k){
    				merge(list+j,list+j+k,w+k,k);
    			}
    			for(j=0;j<n;j++){
    				list[j]=w[j];
    			}
    		}return list;
    	}
    }
    const list = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    console.log("Merge Sort: :");
    console.log(mergeSort(list));
    console.log("\n");
    0 回复  |  直到 7 年前
    推荐文章