quickSort(arr,parm,sortsc) {
if(arr.length < 1) {//如果数组就是一项,那么可以直接返回
return arr;
}
let centerIndex = Math.floor(arr.length / 2);//获取数组中间的索引
let centerValue = arr.splice(centerIndex,1)[0];//获取数组中间项
let left = [], right = [];
let a = arr.length
for(let i = 0; i < arr.length; i++){
if(!parm){
switch (sortsc) {
case 'asc':
if(arr[i] < centerValue){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
break;
case 'desc':
if(arr[i] > centerValue){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
break;
default:
break;
}
}else{
switch (sortsc) {
case 'asc':
if(arr[i][parm] < centerValue[parm]){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
break;
case 'desc':
if(arr[i][parm] > centerValue[parm]){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
default:
break;
}
}
}
if(!parm){
return this.quickSort(left,null,sortsc).concat( [centerValue],this.quickSort(right,null,sortsc) );//递归调用
}else{
return this.quickSort(left,parm,sortsc).concat( [centerValue],this.quickSort(right,parm,sortsc) );//递归调用
}
}
数组快排,可数字,可对象,该方法两个参数第一个参数是要排序的数组;
第二个参数是数组里每一项是数字还是对象,如果是数字,参数传null,如果是对象传排序条件;第三个参数是正序还是倒叙 ,正序是asc 倒叙是desc。