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 &amp; 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...