1.最简单版,需要申请数组空间
function quickSort(arr) {
if (arr.length <= 1) {
return arr
}
let pivotIndex = Math.floor(arr.length / 2)
let pivot = arr.splice(pivotIndex, 1)[0]
let left = []
let right = []
for (let 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))
}
2.在原数组上修改,利用交换位置
function quickSort(arr){
if(arr.length<=1) return arr;
let flag = arr[0];
let left = 0;
let right = arr.length - 1;
while(left < right){
//right找到小于flag的值才停下,左边找到大于flag的值才停下
while(left<right && arr[right]>=flag) right--;
while(left<right && arr[left]<flag) left++;
//交换左右指针的值
if(left<right){
let temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
//退出循环,把right的值填坑到第一个,flag填坑到right
arr[0]=arr[right];
arr[right]=flag;
quickSort(arr.slice(0,right))
quickSort(arr.slice(right+1))
return arr;
}
quickSort([2,1,3,4,5,6]);