几种经典排序算法的JS实现方法

一、冒泡排序

原理

冒泡排序将待排序元素两两比较,根据比较结果交换位置,一遍冒泡会让至少一个元素到达最终位置。重复这个过程,直到排序完成。

JS实现

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;
}

示例

const arr = [4, 5, 1, 3, 2];
console.log(bubbleSort(arr)); // [1, 2, 3, 4, 5]

二、快速排序

原理

快速排序采用分治的思想,选取一个基准值(pivot),将数组中所有小于等于它的元素放在左边,所有大于它的元素放在右边。然后递归地对左右两个子数组进行快速排序。

JS实现

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));
}

示例

const arr = [4, 5, 1, 3, 2];
console.log(quickSort(arr)); // [1, 2, 3, 4, 5]

以上是两种经典排序算法的JS实现方法,并包含了示例说明。冒泡排序和快速排序有各自的优劣,需要根据实际场景选择合适的排序算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:几种经典排序算法的JS实现方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • C++实现自顶向下的归并排序算法

    下面是“C++实现自顶向下的归并排序算法”的完整攻略。 归并排序的概念 归并排序是一种分治法排序算法,它将一个大数组分成两个部分,分别对这两个部分进行排序,最后将两个排好序的部分合并起来。归并排序的时间复杂度为O(n log n)。 归并排序的步骤 实现归并排序需要以下三个步骤: 分割 – 将数组分成两个部分,分别对每个部分进行排序。该过程使用二分法来实现。…

    算法与数据结构 2023年5月19日
    00
  • PHP面试常用算法(推荐)

    对于“PHP面试常用算法(推荐)”这一话题,我可以给出一个较为完整的攻略,如下: PHP面试常用算法(推荐) 1.算法的定义 算法(Algorithm)是指解决问题的方法和步骤,也就是解决问题的具体步骤和策略。算法包括很多种,比如常见的排序算法、查找算法、递归算法等等。在 PHP 的面试中,算法是一个非常重要的考察内容,因此熟练掌握各种算法的基本原理和实现方…

    算法与数据结构 2023年5月19日
    00
  • C语言实现单链表的快速排序算法

    下面是详细的攻略: 单链表快速排序算法的原理 在单链表上实现快速排序,需要了解快速排序算法的原理。快速排序是一种常用的基于比较的排序算法,它的基本思想是:选取一个基准元素(pivot),将数组分成两个部分,一个部分是小于基准元素的,一个部分是大于基准元素的。然后对这两个部分分别递归进行快排,最终得到排序后的数组。 在单链表上,选择基准元素也是一样的,不同的是…

    算法与数据结构 2023年5月19日
    00
  • LeetCode 刷题 Swift 两个数组的交集

    LeetCode 是一个很受程序员欢迎的在线编程平台,提供了许多开发者解决问题的方法和思路。在 LeetCode 上,我们可以找到很多经典的算法问题,通过解决这些问题来提高自己对于算法和 Swift 编程的能力。本文将详细讲解如何使用 Swift 解决 LeetCode 中的两个数组的交集问题。 问题描述 给定两个数组,编写一个函数来计算它们的交集。 示例 …

    算法与数据结构 2023年5月19日
    00
  • c++归并排序详解

    C++归并排序详解 归并排序是一种基于分治思想的高效排序算法,它的时间复杂度为O(nlogn),并且它的稳定性使得它在实际应用中得到了广泛的应用。在本文中,我们将为大家详细讲解C++归并排序的具体实现过程和算法思想。 算法原理 归并排序基于分治算法,首先将待排序序列不断二分,直到每个子序列只剩一个元素,然后将相邻的子序列进行归并,合并后的子序列再次进行归并,…

    算法与数据结构 2023年5月19日
    00
  • php自定义排序uasort函数示例【二维数组按指定键值排序】

    首先,让我们先了解一下 uasort 函数。uasort 函数是 php 中的一个内置函数,用于对数组进行自定义排序。这个函数和 sort 函数的区别在于,uasort 函数允许我们自定义一个排序函数,在排序时使用这个函数进行排序,而 sort 函数则只能使用默认的排序函数。 下面是一个使用 uasort 函数的示例,演示如何对 PHP 二维数组按照指定键值…

    算法与数据结构 2023年5月19日
    00
  • Java算法之重新排列数组例题

    下面是我对“Java算法之重新排列数组例题”的完整攻略: 题目描述 对于一个给定的整数数组,让其中的偶数放在奇数之前,保持它们原有的相对顺序不变。例如,对于数组[1,2,3,4],需要修改为[1,3,2,4]。 思路分析 对于这个问题,我们可以利用双指针的思路解决。定义两个指针left和right,分别指向数组的头部和尾部。当left指向的数为偶数并且它在r…

    算法与数据结构 2023年5月19日
    00
  • C语言实现冒泡排序算法的示例详解

    C语言实现冒泡排序算法的示例详解 冒泡排序是一种简单但效率较低的排序算法。它重复遍历要排序的数列,每次比较相邻两个元素,如果顺序不对就交换两元素顺序。该算法的时间复杂度为 O(n^2)。 以下是C语言实现冒泡排序的示例代码: #include <stdio.h> int main() { int arr[] = {5, 3, 8, 6, 4}; …

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部