快速排序就是从中间取一个数然后声明两个空数组, 小于这个数的放在左边大于这个数的放在右边
最后通过递归调用实现的一种排序方法比冒泡排序用时更多
function quickSort(arr) {
console.time("快速排序耗时")
//递归出口
if (arr.length <= 1) {
return arr;
}
let middleIndex = Math.floor(arr.length / 2);//中间数的下标 分奇偶
let middle = arr[middleIndex]; //或者 let middle = arr.splice(middleIndex, 1)
let left=[];
let right=[];
for(let i=0;i<arr.length;i++){
if(arr[i]<middle){
left.push(arr[i])
}else if(arr[i]>middle){
//注意这里不要直接写else 要排除相等的时候 否则会造成死循坏
right.push(arr[i])
}
}
console.timeEnd("快速排序耗时")
return sort(left).concat([middle],sort(right))
}
console.log(sort(arr))
上面这种方法,会去重,[2, 3, 1, 1, 4, 1, 0]进行排序, 代码实际输出:0,1,2,3,4
不去重的写法:代码实际输出:0,1,1,1,2,3,4
function quickSort(arr) {
console.time("快速排序耗时")
//递归出口
if (arr.length <= 1) {
return arr;
}
let middleIndex = Math.floor(arr.length / 2);//中间数的下标 分奇偶
let middle = arr[middleIndex];
let left=[];
let right=[];
let temp = [middle];
for(let i=0;i<arr.length;i++){
if(arr[i]<middle){
left.push(arr[i])
}else if(arr[i]>middle){
//注意这里不要直接写else 要排除相等的时候 否则会造成死循坏
right.push(arr[i])
}else {
temp.push(middle)
}
}
console.timeEnd("快速排序耗时")
return sort(left).concat(temp,sort(right))
}
console.log(sort(arr))