快速排序
/*
1. 首先,从数组中选择一个值作为主元(pivot),简单起见选开头的元素
2. 创建2个(指针)引用,左边一个指向数组第一个值,右边一个指向数组最后一个值,
先移动右指针,寻找一个比主元小的值,然后把值赋给左指针的指向
再移动左指针,寻找一个比主元大的值,然后把值赋给右指针的指向
交替移动左右指针
这样下来,把比主元小的数都放到主元左边,比主元大的数都放到主元的右边。这一步叫做划分操作。
然后对主元左边和右边的小数组,接着进分别行划分操作,直至数组已完全排序。
*/
function quickSort(arr,L,R){
if(L >= R) return;
let left = L;
let right = R;
let pivot = arr[left];
while(left < right){
while(left < right && arr[right] >= pivot){
right--;
}
if(left < right){
arr[left] = arr[right];
}
while(left < right && arr[left] <= pivot){
left++;
}
if(left < right){
arr[right] = arr[left];
}
if(left >= right){
arr[left] = pivot;
}
}
quickSort(arr,L,left-1);
quickSort(arr,left+1,R);
}
let arr = [1,5,36,8,3,9,17,22];
quickSort(arr,0,arr.length-1);
console.log(arr);//[1,3,5,8,9,17,22,36]