CS Learning - Merge Sort - Recursive
by Hari Menon
HTML
<pre>https://github.com/floydpink/computer-science-in-javascript/blob/master/algorithms/sorting/insertion-sort/insertion-sort.js
</pre>
<span>Size: </span>
<input type="text" name="size" id="size" value="90000"> <span>Max: </span>
<input type="text" name="size" id="maximum" value="100000">
<button id="generateAndSort">Generate & Sort</button>
<br><pre id="output"></pre>
JavaScript
'use strict';
function setOutput(output) {
document.querySelector('#output').innerHTML = output;
}
function generateLargeUniqueArray(size, max) {
var array = [];
while (array.length < size) {
var randomNumber = Math.ceil(Math.random() * max);
if (array.indexOf(randomNumber) == -1) {
array.push(randomNumber);
}
}
return array;
}
function getCurrentTime() {
return '\n' + new Date().toISOString() + '\n';
}
/**
* Merges to arrays in order based on their natural
* relationship.
* @param {Array} left The first array to merge.
* @param {Array} right The second array to merge.
* @return {Array} The merged array.
*/
function merge(left, right) {
var result = [],
il = 0,
ir = 0;
while (il < left.length && ir < right.length) {
if (left[il] < right[ir]) {
result.push(left[il++]);
} else {
result.push(right[ir++]);
}
}
return result.concat(left.slice(il)).concat(right.slice(ir));
}
/**
* Sorts an array in ascending natural order using
* merge sort.
* @param {Array} items The array to sort.
* @return {Array} The sorted array.
*/
function mergeSort(items) {
if (items.length < 2) {
return items;
}
var middle = Math.floor(items.length / 2),
left = items.slice(0, middle),
right = items.slice(middle),
params = merge(mergeSort(left), mergeSort(right));
// Add the arguments to replace everything between 0 and last item in the array
params.unshift(0, items.length);
items.splice.apply(items, params);
return items;
}
function sortArray(array) {
return mergeSort(array);
}
document.querySelector('#generateAndSort').onclick = function () {
var size = document.querySelector('#size').value;
var max = document.querySelector('#maximum').value;
var output = getCurrentTime();
var array = generateLargeUniqueArray(size, max);
console.log('Unsorted...