复杂排序---归并排序

alt text

function merge(left, right) {
    var tmp = [];
    while (left.length && right.length) {
        if (left[0] < right[0])
            tmp.push(left.shift());
        else
            tmp.push(right.shift());
    }
    return tmp.concat(left, right);
}

function mergeSort(a) {
    if (a.length === 1)
        return a;
    var mid = ~~(a.length / 2),
        left = a.slice(0, mid),
        right = a.slice(mid);
    return merge(mergeSort(left), mergeSort(right));
}