📜  在 js 中排序 - Javascript (1)

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

在 JS 中排序 - Javascript

在 Javascript 中,有多种排序方法可供使用。在本文中,我们将介绍这些方法并提供相应的代码片段。

原生数组排序方法

Javascript 中数组有一个 sort 方法,它可以对数组进行排序。默认情况下,它会将数组的元素转换为字符串,然后按照 Unicode 编码顺序进行排序。示例如下:

const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];

// 升序排序
console.log(arr.sort((a, b) => a - b)); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

// 降序排序
console.log(arr.sort((a, b) => b - a)); // [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

需要注意的是,sort 方法会修改原数组并返回排序后的数组。

冒泡排序

冒泡排序是一种简单的排序算法。它的基本思想是从第一个元素开始,逐个比较相邻元素的大小,如果前者大于后者则互换位置。重复这个过程直到没有相邻元素需要比较。

const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];

for (let i = arr.length - 1; i > 0; i--) {
  for (let j = 0; j < i; j++) {
    if (arr[j] > arr[j + 1]) {
      const temp = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = temp;
    }
  }
}

console.log(arr); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
插入排序

插入排序是一种简单但有效的排序算法。它的基本思想是将数组分为已排序和未排序两部分,每次从未排序部分选择一个元素插入到已排序部分的合适位置,直到未排序部分为空。

const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];

for (let i = 1; i < arr.length; i++) {
  const temp = arr[i];
  let j = i - 1;
  while (j >= 0 && arr[j] > temp) {
    arr[j + 1] = arr[j];
    j--;
  }
  arr[j + 1] = temp;
}

console.log(arr); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
快速排序

快速排序是一种高效的排序算法。它的基本思想是选择一个基准元素,将小于它的元素放到它的左边,大于它的元素放到它的右边,然后分别对左右两边进行递归排序。

const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];

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).concat([pivot], quickSort(right));
}

console.log(quickSort(arr)); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
归并排序

归并排序是一种稳定的排序算法。它的基本思想是将一个无序的数组分成两个子数组,对子数组进行递归排序后再合并成一个有序数组。

const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];

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

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

console.log(mergeSort(arr)); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

以上就是在 Javascript 中实现常见排序算法的示例。你可以将它们作为基础,进一步了解和掌握排序算法的实现和优化。