Skip to content

快速排序

快速排序(Quicksort)是一种常用的高效排序算法,利用分治思想实现

  • 从数组中选择一个基准值(pivot),通常选择第一个元素
  • 将所有比pivot值小的元素放到它的左边,比pivot大的放到它的右边。此时pivot处于正确的排序位置
  • 递归地对pivot左边和右边的子数组进行步骤1、2的排
js
function quickSort(arr, low, high) {
  if (low < high) {
    const pivot = partition(arr, low, high)
    quickSort(arr, low, pivot - 1)
    quickSort(arr, pivot + 1, high)
  }
}

function partition(arr, low, high) {
  const pivot = arr[low]
  while (low < high) {
    while (low < high && pivot <= arr[high])
      --high

    // 跳出循环时 arr[high] < pivot  pivot 右侧值都大于 pivot  需要现将 小于pivot值放在低位
    arr[low] = arr[high]
    while (low < high && arr[low] <= pivot)
      ++low

    // 跳出循环 arr[low] > pivot   pivot 左侧值都小于 pivot  需要现将 大于pivot值放在高位
    arr[high] = arr[low]
    arr[low] = pivot
  }
  return low
}
function quickSort(arr, low, high) {
  if (low < high) {
    const pivot = partition(arr, low, high)
    quickSort(arr, low, pivot - 1)
    quickSort(arr, pivot + 1, high)
  }
}

function partition(arr, low, high) {
  const pivot = arr[low]
  while (low < high) {
    while (low < high && pivot <= arr[high])
      --high

    // 跳出循环时 arr[high] < pivot  pivot 右侧值都大于 pivot  需要现将 小于pivot值放在低位
    arr[low] = arr[high]
    while (low < high && arr[low] <= pivot)
      ++low

    // 跳出循环 arr[low] > pivot   pivot 左侧值都小于 pivot  需要现将 大于pivot值放在高位
    arr[high] = arr[low]
    arr[low] = pivot
  }
  return low
}