JSFiddle - React, Tailwind, and code Playground
by Anton
HTML
In: <div id="input"></div>
<br>
Out: <div id="output"></div>
JavaScript
var N = 10,
inArr = [],
outArr = [],
iter = 0;
// Generate
for(var i = 0; i < N; i++) {
inArr.push(Math.round(Math.random() * 10));
}
show(inArr, false);
outArr = mergeSort(inArr);
show(outArr, true);
return;
// --------------------------------------------------------------------
function show(arr, isOutput) {
$('#' + (isOutput ? 'output' : 'input')).html(arr.join(' '));
}
// --------------------------------------------------------------------
// OK!
function mergeSort(arr) {
iter++;
//console.log(iter + ': ' + arr.join(' '));
if(arr.length <= 1 || iter > 100)
return arr;
var splitPos = Math.min(Math.max(0, Math.round(arr.length/2)), arr.length-1),
group1 = arr.slice(0, splitPos),
group2 = arr.slice(splitPos);
//console.log(group1.join(' ') + ' | ' + group2.join(' '));
group1 = mergeSort(group1);
group2 = mergeSort(group2);
var i = 0, j = 0,
res = [];
while(i < group1.length || j < group2.length) {
if(i >= group1.length) {
res.push(group2[j]);
j++;
} else if(j >= group2.length) {
res.push(group1[i]);
i++;
} else if(group1[i] < group2[j]) {
res.push(group1[i]);
i++;
} else {
res.push(group2[j]);
j++;
}
};
return res;
}
// --------------------------------------------------------------------
// OK!
function quickSort(arr) {
iter++;
//console.log(iter + ': ' + arr.join(' '));
if(arr.length <= 1 || iter > 1000)
return [].concat(arr);
else {
var pivotPos = Math.min(Math.max(0, Math.round((arr.length - 1) / 2)), arr.length - 1),
newPos = 0,
left = [], right = [];
//console.log('\tpivot pos: ' + pivotPos + ' (' + arr[pivotPos] + ')');
for(var i = 0; i < arr.length; i++) {
if(i == pivotPos)
continue;
...