返回

用JavaScript征服排序算法:快速、插入和冒泡排序

前端

引言:算法世界的基石

算法,作为计算机科学的基石,是解决复杂问题的简洁有效的方法。而排序算法,则是算法家族中必不可少的成员,负责将数据组织成井然有序的序列。在学习排序算法时,我们常常会为其简洁明了的原理而惊叹,但真正在代码中实现它们时,却会发现其中的微妙之处和程序员内功的修炼。本文将深入探讨三种经典的排序算法——快速排序、插入排序和冒泡排序,并用JavaScript语言对其进行实现。

快速排序:分治的魅力

快速排序,顾名思义,是一种分而治之的排序算法。其基本思想是将待排序数组划分为两个子数组:一个包含所有小于基准元素的元素,另一个包含所有大于或等于基准元素的元素。随后,递归地对这两个子数组进行排序,最终将整个数组排序。

在JavaScript中,快速排序可以如下实现:

const quickSort = (arr) => {
  if (arr.length <= 1) return arr;
  const pivot = arr[0];
  const left = [];
  const right = [];
  for (let i = 1; i < arr.length; i++) {
    arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
  }
  return [...quickSort(left), pivot, ...quickSort(right)];
};

插入排序:简单高效

插入排序,是一种简单直观的排序算法。其基本思想是将待排序数组视为两部分:有序部分和无序部分。从无序部分中取出一个元素,并将其插入有序部分中合适的位置。重复此过程,直到所有元素都被插入有序部分中。

在JavaScript中,插入排序可以如下实现:

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

冒泡排序:经典中的经典

冒泡排序,是最经典的排序算法之一。其基本思想是重复比较相邻元素,并将较大的元素“冒泡”到数组末尾。直到所有元素都被比较完毕,整个数组有序为止。

在JavaScript中,冒泡排序可以如下实现:

const 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]) {
        const temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
};

结语:算法世界的神奇之旅

通过对快速排序、插入排序和冒泡排序的探索,我们不仅掌握了三种强大的排序算法,还领略了算法世界的神奇魅力。从分而治之到简单插入,再到经典冒泡,每一算法都体现了不同的思维方式和设计哲学。在计算机科学的广阔天地中,算法是不可或缺的基石,而学习和掌握它们,将带你踏上探索和创造的无限旅程。