1).快速排序原理
- 取一个基准值(哨兵pivot)。
- 将基准值依次和其他项进行比较,小于基准值的放到一个集合A里,大于等于基准值的放到另一个集合B里。
- 再将A、B集合接着重复步骤1、2。
2).js程序设计
function quickSort(arr){
if(!arr || arr.length<2) return arr
const pivot = arr.pop() //获取数组最后一位值作为基准值
const left = arr.filter(item => item< pivot) // 小于基准值的集合A
const right = arr.filter(item => item >= pivot) // 大于等于基准值的集合B
return quickSort(left).concat([pivot],quickSort(right)) //集合A、基准值和集合拼接起来,A和B采用递归接着排序
}
3).总结分析
优点:程序简单明了实现了快速排序,方便理解。
缺点:定义了三个变量pivot,left,right消耗了空间复杂度Q(3n)=Q(n),另外里面进行了两次filter数组迭代计算增加了
时间复杂度Q(2n)=Q(n), 每次将集合一分为二计算量也会减小很多,复杂度为logn,最坏情况下进行n-1次递归运算,所有平均时间复杂度为nlogn