版本一:
function quickSort(arr, right, left) {
var temp, i = right, j = left;
if (i >= j) {
return
}
while (i < j) {
while (arr[i] <= arr[j] && i < j) {
j--
}
if (i < j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
}
while (arr[i] <= arr[j] && i < j) {
i++
}
if (i < j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
j--;
}
}
quickSort(arr, right, i - 1);
quickSort(arr, i + 1, left);
}
使用方式:
var arr = [4, 51, 2, 2, 1, 32, 1, 1, 2, 21, 1,2,3,1,2,111,2,2];
quickSort(arr, 0, arr.length - 1);
console.log(arr);
这种方式会对原数组产生影响。
版本2:
引用自:http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
var pivotIndex = Math.floor(arr.length / 2);
//需要将基数项删除
var pivot = arr.splice(pivotIndex, 1)[0];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}
这种方法理解起来比较简单,但是空间消耗比较严重。