js快速排序

js快速排序

function quickSort (arr) {
var left = [];
var right = [];
if (arr.length <= 1) {
// 控制语句,用于结束递归
return arr;
}
var middle = arr.splice(0,1)[0];
for (var i = 0;i < arr.length ;i++){
if (arr[i] < middle){
left.push(arr[i])
}else {
right.push(arr[i])
}
}
return quickSort(left).concat(middle, quickSort(right))
}
快速排序排序的数组越乱性能越好 每次拆分后两边的内容大小不一,所以执行效率不稳定
时间复杂度:
最好的情况:每一次base值都刚好平分整个数组,O(nlogn)
最坏的情况:每一次base值都是数组中的最大/最小值,O(n2)
空间复杂度
快速排序是递归的,需要借助栈来保存每一层递归的调用信息,所以空间复杂度和递归树的深度一致
最好的情况:每一次base值都刚好平分整个数组,递归树的深度O(logn)
最坏的情况:每一次base值都是数组中的最大/最小值,递归树的深度O(n)

 

 

posted @ 2019-03-07 13:32  那个村  阅读(425)  评论(5)    收藏  举报