JavaScript算法:Quicksort

快速排序是一种更有效的搜索算法比选择排序,在大多数情况下,这让使用递归的。

递归意味着我们从同一函数内调用一个函数。有时,这是一种非常有用的做法,这是其中一种情况。

我“在大多数情况下”说,因为我们将看到,在最坏情况下,冒泡排序可以采取相同的选择时间排序:O(n^2)。但在最佳情况下,它将O(n log n)O(n)和之间的中间运行O(n^2)

它是如何工作的?给定一个数组,我们选择一个称为数据透视表的项目。然后,我们得到所有小于枢轴的项目,以及大于枢轴的项目。

然后,我们在组成越来越小的项目的2数组上运行相同的操作。

看代码比描述代码容易:

const quickSort = (originalList) => {
  const list = [...originalList]

  if (list.length < 2) {
    return list
  }

  const pivot = list[0]

  const smaller = list.filter((item) => item < pivot)
  const bigger = list.filter((item) => item > pivot)

  return [...quickSort(smaller), pivot, ...quickSort(bigger)]
}

在这种情况下,我选择枢轴作为数组中的第一项,但也可以将其作为中间的项,例如:
const pivot = list[Math(floor(list.length / 2)]

请注意,我们是如何首先复制数组的,所以调用quickSort()不会修改原始数组,它只会返回一个

新的排序数组:

const a = [1, 6, 3, 4, 5, 1, 0, 4, 8]

console.log(quickSort(a))
//[0, 1, 1, 3, 4, 4, 5, 6, 8

console.log(a)
//[1, 6, 3, 4, 5, 1, 0, 4, 8]```

上一篇:Python – 按dict的dict值的值对dics列表进行排序


下一篇:快速排序