快速排序

实现的思路

  • 选择一个数组中的某一项做为基准(这里选择中间的这一项作为基准)
  • 将这一项从原数组中删除
  • 将原数组中的每一项与基准项进行比较,比基准项小的放入左数组中,比基准项大的放入右数组中
  • 分别对左、右数组进行以上操作,直到数组长度小于等于1时结束
  • 将左数组、基准项、右数组拼接成一个数组

代码

       function quickSort(arr){
          if(arr.length<=1){
               return arr;
           }
          let mid = Math.floor(arr.length/2) //基准项
          let midValue = arr.splice(mid,1)[0] //记录下基准项的值
          let left = [], right = []; 
          arr.forEach(item => {
              item < midValue ? left.push(item) : right.push(item);  
          })
          return quickSort(left).concact(midValue, quickSort(right));
        }

时间复杂度和空间复杂度

  • 时间复杂度: 最好、平均都是 O(nlogn) 最坏的情况是 O(n2)
  • 空间复杂度:O(logn)
上一篇:快速排序


下一篇:快速排序实现(C++)