快速排序的宗旨在于 找中点 分左右 在读取这篇文章之前,你需要了解递归函数
递归函数由三大要点构成
1.终止条件
2.运算规则
3.返回结果
var arr = [2,5,1,3,7,4]
终止条件:
如果数组之中只有一项或者数组为空,这时候终止递归执行
function quickSort( arr ){
if(arr.length ===1 || arr.length ===0 ){
return arr;
}
}
运算规则:
1.找到中间点,找到中间下标
var mid_index = parseInt(arr.length / 2);
var mid_num = arr[mid_index];
2.分左右
var left =[];
var right = [];
for(var i =0 ; i< arr.length ; i++){
不和自己比对
if(i === mid_index){
continue;
}
分配左右
if( arr[i] > mid_num){
right.push(arr[i]);
}else{
left.push(arr[i]);
}
}
结果就是 排序好的left 拼接上 中间的数据 再拼接上 right
其中有一个不得不注意的地方,数组拼接方法concat第一个参数必须转换程数组 => [mid_num]
return quickSort(left).concat([mid_num],quickSort(right));
var res = quickSort(arr);
console.log(res);
总结:
if (arr.length === 1 || arr.length === 0) {
return arr;
}
var mid_index = parseInt(arr.length / 2);
var mid_num = arr[mid_index];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (i === mid_index) {
continue;
}
if (arr[i] > mid_num) {
right.push(arr[i]);
} else {
left.push(arr[i]);
}
}
return quickSort(left).concat([mid_num], quickSort(right));
}
var res = quickSort(arr)
console.log(res);