一、思想:
1、取左端、中间、右端的三个数进行排序,将中间数作为枢轴值。
2、将枢轴值放在数组的倒数第二位。
3、双向扫描,i从左边扫描比枢轴值大的数,j从右边扫描比枢轴值小的数,如果i<j,交换位置。
4、将枢轴值放在它的最终位置。如果i<pivot,交换位置。
二、程序:
var arr = [4,5,7,3,1,2,6,8];
function quickSort(arr,left,right){
if(left < right){
dealPivot(arr,left,right);
var i = left;
var pivot = right - 1;
var j = pivot;
while(true){
while(arr[++i] < arr[pivot]){
}
while(j > left && arr[--j] > arr[pivot]){
}
if(i < j){
swap(arr,i,j);
}else{
break;
}
}
if(i < pivot){
swap(arr,i,pivot);
}
quickSort(arr,left,i-1);
quickSort(arr,i+1,right);
}
}
function dealPivot(arr,left,right){
var mid = parseInt((left + right)/2);
if(arr[left] > arr[mid]){
swap(arr,left,mid);
}
if(arr[left] > arr[right]){
swap(arr,left,right)
}
if(arr[mid] > arr[right]){
swap(arr,mid,right);
}
swap(arr,mid,right-1);
}
function swap(arr,a,b){
var temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
quickSort(arr,0,arr.length-1);
console.log(arr);