思路
快速排序在基本思想上和归并排序是一致的,仍然坚持“分而治之”的原则不动摇,即取数组中间下标的值,再将其他值与该值相比,大于加入右数组,小于加入左数组,递归调用
实现
function quickSort(arr){
if(!Array.isArray(arr)){
throw new TytpeError('类型错误');
}
let len = arr.length;
// 递归出口条件
if(len <= 1){return arr;}
// 获取中间下标
var centerindex = Math.floor(len/2);
// 获取中间下标对应的值
var centerElement = arr[centerindex];
// 创建左右数组
var leftArr = [];
var rightArr = [];
// 循环判断,若元素大于中间下表对应的值则加入左数组,反之加入右数组
for(var i = 0;i<len;i++){
if((i != centerindex) && (arr[i] >= centerElement)){
rightArr.push(arr[i]);
}
if((i != centerindex) && (arr[i] < centerElement)){
leftArr.push(arr[i]);
}
}
//递归调用该函数
return quickSort(leftArr).concat(centerElement, quickSort(rightArr));
}