Skip to content

Instantly share code, notes, and snippets.

@sheniff
Created April 22, 2015 04:26
Show Gist options
  • Select an option

  • Save sheniff/04e27fb130c8305e0b30 to your computer and use it in GitHub Desktop.

Select an option

Save sheniff/04e27fb130c8305e0b30 to your computer and use it in GitHub Desktop.
QuickSort in JS
function quickSort (arr) {
if(arr.length <= 1) {
return arr;
}
var pivot = choosePivot(arr);
var divider = divide(arr, pivot);
var a1 = quickSort(arr.slice(0, divider));
var a2 = quickSort(arr.slice(divider + 1, arr.length));
a1.push(arr[divider]);
return a1.concat(a2);
}
// choosing middle value between first, second and last elements
function choosePivot (arr) {
var l = arr.length - 1;
if(arr.length <= 2) {
return 0;
}
return (arr[0] >= arr[1] && arr[0] <= arr[l]) || (arr[0] <= arr[1] && arr[0] >= arr[l]) ? 0 :
(arr[1] >= arr[0] && arr[1] <= arr[l]) || (arr[1] <= arr[0] && arr[1] >= arr[l]) ? 1 : l;
}
function divide (arr, pivot) {
// swap pivot to the beginning
tmp = arr[0];
arr[0] = arr[pivot];
arr[pivot] = tmp;
var p1 = 1,
p2 = arr.length - 1,
pivotVal = arr[0],
tmp = null;
while (p1 < p2) {
if(arr[p1] > pivotVal) {
if(arr[p2] <= pivotVal) {
// swap
tmp = arr[p1];
arr[p1] = arr[p2];
arr[p2] = tmp;
}
--p2;
} else {
++p1;
}
}
p1 = arr[p1] > pivotVal ? p1 - 1 : p1;
// swap pivot to proper position
tmp = arr[p1];
arr[p1] = arr[0];
arr[0] = tmp;
return p1;
}
console.log(quickSort([9,3,1,6,65,32,2,1,1,4,9]));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment