Algorithms / Sorting

// Time Complexity from O(n log(n)) to O(n^2)
// Space Complexity O(log(n))

function doSort(items, fst, lst) {
    if (fst >= lst)
        return;
    let i = fst;
    let j = lst;
    let x = items[Math.floor((fst + lst) / 2)];

    while (i < j) {
        while (items[i] < x) i++;
        while (items[j] > x) j--;
        if (i <= j) {
            let tmp = items[i];
            items[i] = items[j];
            items[j] = tmp;
            i++;
            j--;
        }
    }
    doSort(items, fst, j);
    doSort(items, i, lst);
}

function sort(arr) {
    let items = arr.slice();
    doSort(items, 0, items.length - 1);
    return items;
}

let items = [41532];
let sortItems = sort(items);
// sortItems is [1, 2, 3, 4, 5]
console.log(sortItems);

// *** simplified speed test ***
let i = 0;
items = Array
    .apply(nullArray(200))
    .map(() => ++i);
let tmp = items[5];
items[5] = items[6];
items[6] = tmp;
let count = 10000;
let start = new Date();

for (i = 0; i < count; i++)
    sort(items);

let now = new Date();
let milliseconds = now - start;

console.log("milliseconds is", milliseconds);
// about 143 milliseconds