快速排序

127 阅读1分钟

快速排序

题目

用 Javascript 实现快速排序,并说明时间复杂度。

思路

快速排序是基础算法之一,算法思路是固定的

  • 找到中间位置 midValue
  • 遍历数组,小于 midValue 放在 left ,大于 midValue 放在 right
  • 继续递归,concat 拼接
/**
 * 快速排序(使用 splice)
 * @param arr number arr
 */
function quickSort1(arr) {
  const length = arr.length;
  if (length === 0) return arr;
  const midIndex = Math.floor(length / 2);
  const midValue = arr.splice(midIndex, 1)[0];
  let left = [];
  let right = [];
  for (let i = 0; i < length; i++) {
    const ele = arr[i];
    if (ele < midValue) {
      left.push(ele);
    } else {
      right.push(ele);
    }
  }

  return quickSort1(left).concat([midValue], quickSort1(right));
}
/**
 * 快速排序(使用 slice)
 * @param arr number arr
 */
function quickSort2(arr) {
  const length = arr.length;
  if (length === 0) return arr;
  const midIndex = Math.floor(length / 2);
  const midValue = arr.slice(midIndex, midIndex + 1)[0];
  let left = [];
  let right = [];
  for (let i = 0; i < length; i++) {
    if (i != midIndex) {
      const ele = arr[i];
      if (ele < midValue) {
        left.push(ele);
      } else {
        right.push(ele);
      }
    }
  }

  return quickSort2(left).concat([midValue], quickSort2(right));
}