JavaScript 算法-选择排序的实例教程

45 阅读1分钟

假设我们有一个数字数组,我们想按元素大小来排序。

你可以有一个对象数组,你可以比较一个对象的属性,比如按年龄排序,或者按姓氏的字母顺序排序。这些细节都不会改变。

我们以这种方式工作:我们挑选第一个项目。然后我们将其与第二项进行比较。如果第二项比较小,我们就把它和第一项交换。以此类推,我们将第一个项目与数组中的每个项目进行比较。

一旦我们知道我们有最小的项目,我们就切换到第二个元素,并与数组中的每个项目进行比较,忽略索引0,因为我们已经知道那是最小的。以此类推,直到数组的末端。

正如你所看到的,这个算法是非常昂贵的。它不仅对数组中的每一项进行迭代:对于每一项,它又对数组进行迭代。

其复杂度为O(n^2) 。请注意,从技术上讲,我们所比较的项的数量一直在变小,但这对于复杂度的大O公约来说并不意味着什么。

下面是我们对选择排序的实现。

const selectionSort = (originalList) => {
  //we first copy the array to avoid modifying the original array, since objects are passed by reference in JS
  const list = [...originalList]
  const len = list.length
  for (let i = 0; i < len; i++) {
    let min = i
    for (let j = i + 1; j < len; j++) {
      if (list[min] > list[j]) {
        min = j
      }
    }
    if (min !== i) {
      // a new minimum is found. Swap that with the current element
      ;[list[i], list[min]] = [list[min], list[i]]
    }
  }
  return list
}

const listOfNumbers = [1, 6, 3, 4, 5]
console.log(selectionSort(listOfNumbers)) //[1,3,4,5,6]