sort comparisons

by russau

JavaScript

function quicksort(array, start, end)
{
    writeline('start ' + start);
    writeline('end ' + end);
    
    if (end-1>start)
    {
        var pivot = start + Math.floor(Math.random() * (end - start));
        pivot = partition(array, start, end, pivot);
        quicksort(array, start, pivot);
        quicksort(array, pivot+1, end);
        
    }
}

function partition(array, start, end, pivot)
{
    var piv = array[pivot];
    swap(array, pivot, end); // put pivot at the end for now
    var ptr = 0; //point to the low/high split
    
    
    
    writeline('piv ' + piv);
    for (i=start; i<end; i++)
    {
        if (array[i] < piv)
        {
            
            swap(array, i, ptr);
            writeline('swapped ' + i + ' ptr ' +  ptr + ' ' + array);
            ptr++;
            
        }      
    }
    swap(array, end, ptr);   
    writeline(' done ' + array);
    return ptr;
    
}

function swap(array, a, b)
{
    var tmp = array[a];
    array[a] = array[b];
    array[b] = tmp;
        
}



function mergesort(nums) {
    if (nums.length <= 1) {
        return nums;
    }

    var middle = Math.round(nums.length / 2);
    var left = nums.slice(0, middle);
    var right = nums.slice(middle);

    left = mergesort(left);
    right = mergesort(right);

    return merge(left, right);
}

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