快速排序

6 阅读1分钟

快速排序也是分治的思想,选择一个基准后小于的放左边大于的放右边,保证三者间的大小关系,然后不断分割至三部分都只有一个元素就是绝对的大小关系,然后再出栈就能保证最上层返回的就是排好序的序列了

// 空间复杂度是栈的深度O(logn)-O(n),时间复杂度O(nlogn),最坏情况O(n^2)
function quickSort(arr) {
  if(arr.length<=1) return arr;
  let pivotIndex = Math.floor(arr.length/2);
  let pivot = arr.splice(pivotIndex,1)[0];
  let left = [];
  let right = [];
  for(let i=0;i<arr.length;i++) {
    if(arr[i]<pivot) {
      left.push(arr[i]);
    }else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot],quickSort(right));
}