/*
分为4个区段
p<= k <= i, arr[k] <= x
i+1<= k <= j-1, arr[k] > x
j< k < r, 待扫描
k = r, arr[k] = x
*/
function partition(arr, p, r){
var i = p - 1,
j = p,
x = arr[r];
while(j < r){
if(arr[j] <= x){
i = i + 1;
swap(arr, i, j);
}
j = j + 1;
}
swap(arr, r, i + 1);
return i + 1;
}
function quicksort(arr, p, r){
if(p<r){
var q = partition(arr, p, r);
quicksort(arr, p, q-1);
quicksort(arr, q+1, r);
}
}
function test(){
var arr = [8,9,6,3,5,11,16,2];
quicksort(arr, 0, arr.length-1);
print(arr);
arr = [6,6,6,6,6,6,6,6];
quicksort(arr, 0, arr.length-1);
print(arr);
arr = [1,2,3,4,5,6,7,8];
quicksort(arr, 0, arr.length-1);
print(arr);
arr = [8,7,6,5,4,3,2,1];
quicksort(arr, 0, arr.length-1);
print(arr);
}
function print(arr){
var str = "";
arr.forEach(function(n, i){
str += " " + n;
});
console.log(str);
}
function swap(arr, i, j){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}