📜  数组排序如何在 JavaScript 中内部工作(1)

📅  最后修改于: 2023-12-03 15:26:12.062000             🧑  作者: Mango

数组排序如何在 JavaScript 中内部工作

在 JavaScript 中,我们可以通过多种方式对数组进行排序。常见的排序方法包括快速排序、合并排序、插入排序等等,它们各不相同,但都有一个共同点——对数组的元素进行比较和交换操作。

快速排序

快速排序是最常用的排序算法之一。它的基本思想是选取一个基准值,将数组分成两个部分,一部分小于基准值,一部 分大于基准值,对这两个子数组进行递归排序,最终形成排序好的数组。

下面是一个简单的 JavaScript 实现:

function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
}

这段代码首先判断数组长度是否小于等于 1,如果是,则不需要排序了,直接返回数组本身。接着选取一个基准值,将数组分成左右两个子数组。然后对这两个子数组进行递归排序,并将排好序的左、右数组以及基准值拼接起来返回。

合并排序

合并排序是另一个常用的排序算法,它的基本思路是将数组拆分成两部分,对这两个子数组进行排序,最后将它们合并成一个排好序的数组。

以下是一个简单的 JavaScript 实现:

function mergeSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  var mid = Math.floor(arr.length / 2);
  var left = arr.slice(0, mid);
  var right = arr.slice(mid);
  return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right) {
  var result = [];
  while (left.length && right.length) {
    if (left[0] <= right[0]) {
      result.push(left.shift());
    } else {
      result.push(right.shift());
    }
  }
  while (left.length) {
    result.push(left.shift());
  }
  while (right.length) {
    result.push(right.shift());
  }
  return result;
}

这段代码首先判断数组长度是否小于等于 1,如果是,则不需要排序了,直接返回数组本身。然后选取中间位置,将数组分成左右两个子数组,并对这两个子数组递归调用归并排序函数进行排序。最后,调用合并函数将排序好的左右子数组合并成一个排好序的数组。

插入排序

插入排序是最简单的排序算法之一,它的基本思路是将数组分成已排序部分和未排序部分,每次从未排序部分中选取一个元素,插入到已排序部分中的合适位置以保持有序性。

以下是一个简单的 JavaScript 实现:

function insertionSort(arr) {
  for (var i = 1; i < arr.length; i++) {
    var curr = arr[i];
    var j = i - 1;
    while (j >= 0 && arr[j] > curr) {
      arr[j + 1] = arr[j];
      j--;
    }
    arr[j + 1] = curr;
  }
  return arr;
}

这段代码通过一个循环遍历整个数组,每次将当前元素插入已排序数组中的合适位置。具体来说,它从第二个元素开始取出一个元素,然后从它的前一个元素开始遍历已排序数组,如果当前元素小于已排序数组中的元素,则将已排序数组中的元素向右移动一位,以腾出当前元素的位置。当遍历到已排序数组中的一个元素小于或等于当前元素时,就找到了当前元素要插入的位置,将其插入即可。

总结

以上是 JavaScript 中常用的三种数组排序算法。不同的排序算法有不同的实现细节,但它们的基本思想是相同的。熟练掌握这些排序算法,可以大大提高编写高效 JavaScript 代码的能力。