📜  JavaScript 排序数组 - Javascript (1)

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

JavaScript 排序数组 - Javascript

JavaScript 中提供了很多种排序算法来实现数组排序,包括快速排序、归并排序、冒泡排序等。本文将介绍常用的几种排序算法及其使用方法。

快速排序

快速排序是最常用的排序算法之一。其思想是通过分区的方式将数组分为左右两部分,并递归地对左右两个区间进行排序。快速排序是原地排序,不需要额外的空间。

以下是使用 JavaScript 实现快速排序的代码片段:

function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }

  const pivotIndex = Math.floor(arr.length / 2);
  const pivot = arr.splice(pivotIndex, 1)[0];
  const left = [];
  const right = [];

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }

  return [...quickSort(left), pivot, ...quickSort(right)];
}
归并排序

归并排序是将数组分成两个子序列,对每个子序列进行排序,然后将两个有序子序列合并成一个大序列的排序算法。归并排序是稳定排序,但是需要额外的空间用于存储子序列。

以下是使用 JavaScript 实现归并排序的代码片段:

function mergeSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }

  const middle = Math.floor(arr.length / 2);
  const left = arr.slice(0, middle);
  const right = arr.slice(middle);

  return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right) {
  let i = 0;
  let j = 0;
  const result = [];

  while (i < left.length && j < right.length) {
    if (left[i] < right[j]) {
      result.push(left[i]);
      i++;
    } else {
      result.push(right[j]);
      j++;
    }
  }

  return [...result, ...left.slice(i), ...right.slice(j)];
}
冒泡排序

冒泡排序是最简单的排序算法之一。它的思想是通过不断比较相邻的元素,将较大的元素向数组的尾部移动,较小的元素向数组的头部移动,直到整个数组有序为止。

以下是使用 JavaScript 实现冒泡排序的代码片段:

function bubbleSort(arr) {
  const len = arr.length;

  for (let i = 0; i < len; i++) {
    for (let j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
  }

  return arr;
}
总结

以上就是常用的三种排序算法的 JavaScript 实现代码。在实际工作中,我们需要依据具体的场景来决定选择哪种算法进行排序,以达到最优的效果。