返回

排序算法:使用 JavaScript 实现数据结构

前端

排序算法是计算机科学中用于对数据进行排序的算法。排序算法可以根据不同的标准对数据进行排序,例如数字大小、字母顺序或日期先后。

JavaScript 中有许多内置的排序算法,如 .sort() 方法。但是,这些内置算法可能并不总是最优的。在某些情况下,使用自定义的排序算法可以提高性能。

冒泡排序

冒泡排序是一种简单的排序算法。它通过比较相邻的元素,将较大的元素移到后面。这个过程一直重复,直到没有元素需要移动。

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

  return array;
}

选择排序

选择排序也是一种简单的排序算法。它通过找到数组中最小的元素,并将其与第一个元素交换。然后,它找到数组中第二小的元素,并将其与第二个元素交换。这个过程一直重复,直到数组中的所有元素都被排序。

function selectionSort(array) {
  for (let i = 0; i < array.length; i++) {
    let minIndex = i;
    for (let j = i + 1; j < array.length; j++) {
      if (array[j] < array[minIndex]) {
        minIndex = j;
      }
    }

    let temp = array[i];
    array[i] = array[minIndex];
    array[minIndex] = temp;
  }

  return array;
}

插入排序

插入排序是一种比较高效的排序算法。它通过将每个元素插入到它应该在数组中的位置来对数组进行排序。

function insertionSort(array) {
  for (let i = 1; i < array.length; i++) {
    let currentElement = array[i];
    let j = i - 1;
    while (j >= 0 && currentElement < array[j]) {
      array[j + 1] = array[j];
      j--;
    }

    array[j + 1] = currentElement;
  }

  return array;
}

快速排序

快速排序是一种非常高效的排序算法。它通过选择一个枢轴元素,将数组分成两个部分。然后,它递归地对这两个部分进行排序。

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

  let pivot = array[Math.floor(array.length / 2)];
  let left = [];
  let right = [];

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

  return quickSort(left).concat(pivot, quickSort(right));
}

归并排序

归并排序也是一种非常高效的排序算法。它通过将数组分成两半,递归地对这两半进行排序,然后合并两个排序后的数组。

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

  let mid = Math.floor(array.length / 2);
  let left = mergeSort(array.slice(0, mid));
  let right = mergeSort(array.slice(mid));

  return merge(left, right);
}

function merge(left, right) {
  let merged = [];
  let leftIndex = 0;
  let rightIndex = 0;

  while (leftIndex < left.length && rightIndex < right.length) {
    if (left[leftIndex] < right[rightIndex]) {
      merged.push(left[leftIndex]);
      leftIndex++;
    } else {
      merged.push(right[rightIndex]);
      rightIndex++;
    }
  }

  while (leftIndex < left.length) {
    merged.push(left[leftIndex]);
    leftIndex++;
  }

  while (rightIndex < right.length) {
    merged.push(right[rightIndex]);
    rightIndex++;
  }

  return merged;
}

结论

在本文中,我们介绍了 JavaScript 中常见的排序算法。这些算法有各自的优缺点,在不同的情况下可以使用不同的算法来提高性能。