JSFiddle - React, Tailwind, and code Playground

by Khalil Zhang

JavaScript

Array.prototype.sort = function (sortNumber) {
    if (this.length < 2) {
        return this;
    }

    if (Object.prototype.toString.call(sortNumber) != '[object Function]') {
        throw new TypeError('Sort Function is not a function');
    }

    var middle = Math.floor(this.length / 2),
        left = this.slice(0, middle),
        right = this.slice(middle),
        params = merge(left.sort(sortNumber), right.sort(sortNumber), sortNumber);

    params.unshift(0, this.length);
    this.splice.apply(this, params);
    return this;
}

function merge(left, right, sortNumber) {
    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++]);
        }*/
        var r = sortNumber(left[il], right[ir]);
        if (r < 0) {
            result.push(left[il++]);
        } else if (r > 0) {
            result.push(right[ir++]);
        }
    }
    return result.concat(left.slice(il)).concat(right.slice(ir));
}

function sortNumber(a, b) {
    return a - b;
}


alert(["10", 12, 8, "5", 15].sort(sortNumber));