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