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