var arr = [4, 1, 6, 9, 3, 2, 8, 7];
function swap(arr, a, b) {
var temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
function quickSort2(arr, begin, end) {
if (begin >= end - 1) return;
var left = begin;
var right = end;
do {
do left++; while (left < right && arr[left] < arr[begin]);
do right—; while (right > left && arr[right] > arr[begin]);
if (left < right) swap(arr, left, right)
} while (left < right)
var swapPoint = left == right ? right - 1 : right;
swap(arr, begin, swapPoint);
quickSort2(arr, begin, swapPoint);
quickSort2(arr,swapPoint + 1,end);
}
function quickSort(arr) {
quickSort2(arr, 0, arr.length)
}
quickSort(arr)
console.log(arr);
/*
标准快速排序: 从数组的两头开始查找,与选定的一个元素(leader)比较,
有三种情况
left < right : 左边找到比leader大的停止,右边找到比leader小的停止,
这两个元素进行交换
left = right :①从左边找的一直比leader小就一直往后,直到找到第一个比leader大的元素停止
从右边找的一直比leader大就一直往前,直到找到了left停止寻找的那个元素,
这时候数组寻找完成了,把leader放到中间,让左边都比leader小,右边都比leader大
就需要leader和right-1交换
left > right : 这时候只需要leader和right交换就行了,因为这时候left > right,查找完毕。
/