Реализация JavaScript Сортировка снизу вверх Слияние - PullRequest
0 голосов
/ 28 февраля 2019

У меня проблемы с пониманием того, как перевести код из: Алгоритмист

в 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");
...