JavaScript算法-勾股定理的实例教程

130 阅读1分钟

在大多数情况下,Quicksort是一种比选择排序更有效的搜索算法,它利用了递归的方法。

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

我说 "在大多数情况下",因为正如我们将看到的,在最坏的情况下,泡沫排序可能需要与选择排序相同的时间:O(n^2) 。但是在最好的情况下,它将在O(n log n) ,也就是在O(n)O(n^2) 的中间位置运行。

它是如何工作的?给定一个数组,我们挑选一个项目,称为pivot。然后我们得到所有比枢轴小的项,以及比枢轴大的项。

然后,我们对组成小项和大项的两个数组进行同样的操作。

看到代码比描述它更容易。

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]