我在理解如何从以下位置翻译代码时遇到麻烦: 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");