all files / es6/ mergesort.js

92% Statements 23/25
50% Branches 4/8
100% Functions 5/5
91.67% Lines 22/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 153× 153× 153×     153× 153×     153×     153×     196× 982×   196× 982×     196×   196×   196×   196× 153× 153× 153× 153×     196×    
function getMinFromArrays(arrays, state) {
	let minIndex = -1;
	for (let i = 0, l = arrays.length; i < l; i++) {
		Iif (state[i] >= arrays[i].length) {
			continue;
		}
		Eif (minIndex === -1 || arrays[i][state[i]].offset < arrays[minIndex][state[minIndex]].offset) {
			minIndex = i;
		}
	}
	Iif (minIndex === -1) {
		throw new Error("minIndex negative");
	}
	return minIndex;
}
 
module.exports = function (arrays) {
	const totalLength = arrays.reduce(function (sum, array) {
		return sum + array.length;
	}, 0);
	arrays = arrays.filter(function (array) {
		return array.length > 0;
	});
 
	const resultArray = new Array(totalLength);
 
	const state = arrays.map(function () { return 0; });
 
	let i = 0;
 
	while(i <= totalLength - 1) {
		const arrayIndex = getMinFromArrays(arrays, state);
		resultArray[i] = arrays[arrayIndex][state[arrayIndex]];
		state[arrayIndex]++;
		i++;
	}
 
	return resultArray;
};