自底向上合并排序Javascript实现

时间:2019-02-28 03:36:30

标签: javascript arrays iteration in-place sub-array

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

没有答案