Skip to content

Instantly share code, notes, and snippets.

@guipn
Created September 22, 2012 04:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save guipn/3765097 to your computer and use it in GitHub Desktop.
Save guipn/3765097 to your computer and use it in GitHub Desktop.
Simple quicksort implementations
// The simplest implementation I can write.
function qsort(array) {
var lower, upper, pivot;
if (array.length <= 1) {
return array;
}
pivot = array.pop();
lower = array.filter(function (value) {
return value <= pivot;
});
upper = array.filter(function (value) {
return value > pivot;
});
return qsort(lower).
concat([pivot]).
concat(qsort(upper));
}
// In-place, still simple. Not as readable.
function qsort_ip(array) {
function partition(array, p, q) {
var pivot = array[p],
i = p,
swap;
for (j = p + 1; j < q; j++) {
if (array[j] < pivot) {
i++;
swap = array[i];
array[i] = array[j];
array[j] = swap;
}
}
swap = array[p];
array[p] = array[i];
array[i] = swap;
return i;
}
function qsort_in_place(array, start, end) {
var pivot;
if (start < end) {
pivot = partition(array, start, end);
qsort_in_place(array, start, pivot);
qsort_in_place(array, pivot + 1, end);
}
}
qsort_in_place(array, 0, array.length);
}
@monkyz
Copy link

monkyz commented Sep 22, 2012

nice, thanks :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment