快速排序
原理:
1.找中点,分左右
找到数组中间索引和此处的值,比这个值小的放在左边的数组内,比这个数值大的放在右边的数组内;
利用递归调用自身,直至数组内只有一个或零个元素结束递归
具体代码实现
function quickSort(arr){
// 设置递归出口,当数组只有一项或者0项的时候
//结束递归返回当前数组
if(arr.length <= 1){
return arr;
}
// 找中点
var midIndex = parseInt(arr.length/2);
var left = [];
var right =[];
for(var i = 0;i < arr.length ; i++){
// 当循环到中间数值的时候跳过
if( i === midIndex){
continue;
}
// 循环数组,比这个中值小的放左边数组,大的放右边
if( arr[i] < arr[midIndex] ){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
//返回拼接好的数组
return quickSort(left)
.concat([arr[midIndex]],quickSort(right));
}
注:循环时注意循环到中间值跳过,不然会内存溢出