JS实现简单的冒泡、快速、插入排序等

本文介绍了四种基础排序算法:冒泡排序、快速排序、插入排序和选择排序,以及如何用编程实现它们,同时讲解了斐波那契数列的定义和递归计算方法。这些算法在计算机科学中具有重要应用,涉及时间复杂度为O(n^2)至O(nlogn)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 冒泡排序
    冒泡排序是一种基本的排序算法。它的基本思想是通过相邻元素之间的比较和交换来达到排序的目的。它的时间复杂度是 O(n^2)。
function bubbleSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}
  1. 快速排序
    快速排序是一种常用的排序算法,也是一种分治法的应用。它的基本思想是通过一次快速排序将待排序序列分割成两个子序列,其中一个子序列的所有元素均小于另一个子序列的所有元素。它的时间复杂度是 O(nlogn)。
function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  let pivotIndex = Math.floor(arr.length / 2);
  let pivot = arr[pivotIndex];
  let left = [];
  let right = [];
  for (let i = 0; i < arr.length; i++) {
    if (i === pivotIndex) {
      continue;
    }
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
}
  1. 插入排序
    插入排序是一种简单直观的排序算法。它的基本思想是将待排序序列分为已排序和未排序两部分,然后每次从未排序的部分选择一个元素插入到已排序的部分中的合适位置上。它的时间复杂度是 O(n^2)。
function insertionSort(arr) {
  for (let i = 1; i < arr.length; i++) {
    let current = arr[i];
    let j = i - 1;
    while (j >= 0 && arr[j] > current) {
      arr[j + 1] = arr[j];
      j--;
    }
    arr[j + 1] = current;
  }
  return arr;
}
  1. 选择排序
    选择排序是一种简单直观的排序算法。它的基本思想是每次选择待排序序列中的最小元素,然后将其放到已排序序列的末尾。它的时间复杂度是 O(n^2)。
function selectionSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    let minIndex = i;
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j;
      }
    }
    if (minIndex !== i) {
      let temp = arr[i];
      arr[i] = arr[minIndex];
      arr[minIndex] = temp;
    }
  }
  return arr;
}
  1. 斐波那契数列
    斐波那契数列是一种经典的数学问题,它可以用递归或迭代的方式求解。斐波那契数列的定义是: F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n≥2)。斐波那契数列在计算机科学中有着广泛的应用,例如在算法设计和密码学等领域。
function fibonacci(n) {
  if (n <= 0) {
    return 0;
  }
  if (n === 1 || n === 2) {
    return 1;
  }
  let a = 1;
  let b = 1;
  let c = 0;
  for (let i = 3; i <= n; i++) {
    c = a + b;
    a = b;
    b = c;
  }
  return c;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木偶☜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值