JavaScript实现的七种排序算法总结(推荐!)

JavaScript实现的七种排序算法总结(推荐!)

简介

本文介绍了JavaScript实现的七种排序算法,包括插入排序、冒泡排序、选择排序、希尔排序、归并排序、快速排序和堆排序。每种算法都有对应的JavaScript代码实现,并且详细说明了算法的原理、时间复杂度和代码实现过程。

插入排序

插入排序是一种简单的排序算法,它的基本思想是将数组分成已排序和未排序两部分,遍历未排序部分的每一个元素,将其插入到已排序部分的合适位置。

时间复杂度:O(n^2)

JavaScript代码实现:

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

示例说明:

let arr = [4, 2, 5, 3, 1];
console.log(insertionSort(arr)); // 输出 [1, 2, 3, 4, 5]

冒泡排序

冒泡排序是一种运算简单的排序算法,它的基本思想是遍历数组,将相邻的两个元素进行比较,如果顺序不对就交换位置,直到整个数组都是有序的。

时间复杂度:O(n^2)

JavaScript代码实现:

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

示例说明:

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

选择排序

选择排序是一种简单而直观的排序算法,它的基本思想是每次从未排序的数组中选出一个最小值,插入到已排序数组的末尾。

时间复杂度:O(n^2)

JavaScript代码实现:

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 (i !== minIndex) {
      [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
    }
  }
  return arr;
}

示例说明:

let arr = [4, 2, 5, 3, 1];
console.log(selectionSort(arr)); // 输出 [1, 2, 3, 4, 5]

希尔排序

希尔排序是一个高效的插入排序算法,它的基本思想是先将待排序的数组按照一定的间隔分成若干个子数组,对每个子数组进行插入排序,随着间隔的逐渐缩小,子数组的个数也逐渐减少,最终达到对整个数组进行排序的目的。

时间复杂度:O(n^1.3)

JavaScript代码实现:

function shellSort(arr) {
  const len = arr.length;
  for (let gap = Math.floor(len / 2); gap > 0; gap = Math.floor(gap / 2)) {
    for (let i = gap; i < len; i++) {
      let j = i;
      while (j - gap >= 0 && arr[j] < arr[j - gap]) {
        [arr[j], arr[j - gap]] = [arr[j - gap], arr[j]];
        j -= gap;
      }
    }
  }
  return arr;
}

示例说明:

let arr = [4, 2, 5, 3, 1];
console.log(shellSort(arr)); // 输出 [1, 2, 3, 4, 5]

归并排序

归并排序是一种基于分治思想的排序算法,它的基本思想是将一个大问题拆分成若干个小问题,然后对每个小问题进行排序,最后将所有小问题的排序结果合并成一个有序序列。

时间复杂度:O(nlogn)

JavaScript代码实现:

function mergeSort(arr) {
  if (arr.length < 2) {
    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());
    }
  }
  while (left.length) {
    result.push(left.shift());
  }
  while (right.length) {
    result.push(right.shift());
  }
  return result;
}

示例说明:

let arr = [4, 2, 5, 3, 1];
console.log(mergeSort(arr)); // 输出 [1, 2, 3, 4, 5]

快速排序

快速排序是一种高效的排序算法,它的基本思想是通过一次遍历将待排序数组分为两个部分,一部分比基准值小,一部分比基准值大,然后递归地对每个子数组进行上述操作,直到所有子数组都有序。

时间复杂度:O(nlogn)

JavaScript代码实现:

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

示例说明:

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

堆排序

堆排序是一种树形选择排序算法,它的基本思想是将待排序序列构造成一个大顶堆或小顶堆,然后每次取出堆顶元素,再调整堆结构,直到整个序列有序。

时间复杂度:O(nlogn)

JavaScript代码实现:

function heapSort(arr) {
  buildHeap(arr);
  for (let i = arr.length - 1; i >= 0; i--) {
    [arr[0], arr[i]] = [arr[i], arr[0]];
    heapify(arr, i, 0);
  }
  return arr;
}

function buildHeap(arr) {
  const len = arr.length;
  for (let i = Math.floor(len / 2); i >= 0; i--) {
    heapify(arr, len, i);
  }
}

function heapify(arr, len, i) {
  let largest = i;
  const left = 2 * i + 1;
  const right = 2 * i + 2;
  if (left < len && arr[left] > arr[largest]) {
    largest = left;
  }
  if (right < len && arr[right] > arr[largest]) {
    largest = right;
  }
  if (largest !== i) {
    [arr[i], arr[largest]] = [arr[largest], arr[i]];
    heapify(arr, len, largest);
  }
}

示例说明:

let arr = [4, 2, 5, 3, 1];
console.log(heapSort(arr)); // 输出 [1, 2, 3, 4, 5]

总结

上文介绍了JavaScript实现的七种排序算法,并且提供了每个算法的JavaScript代码实现和时间复杂度分析,希望可以对读者有所帮助。在实际应用中,选择合适的排序算法可以大幅度提高运行效率,是一项重要的编程技能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现的七种排序算法总结(推荐!) - Python技术站

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

相关文章

  • c++深入浅出讲解堆排序和堆

    C++深入浅出讲解堆排序和堆 堆的定义 堆是一种特殊的树形数据结构,它满足以下两个特性: 堆是一个完全二叉树(Complete Binary Tree); 堆中每个节点的值都大于等于(或小于等于)其左右子节点的值。 可以看出,堆一般分为两种类型:大根堆(Max Heap)和小根堆(Min Heap)。大根堆的每个节点的值都大于等于其左右子节点的值,小根堆则相…

    算法与数据结构 2023年5月19日
    00
  • Java中自然排序和比较器排序详解

    Java中自然排序和比较器排序详解 简介 Java中排序分为自然排序和比较器排序两种方式。当对象包含了Comparable接口实现的compareTo方法时,便支持了自然排序。而比较器排序则需要自己实现一个Comparator接口,并传入调用方法中。本文将从以下几个方面详细介绍这两种排序方式: Comparable接口及compareTo方法 Compara…

    算法与数据结构 2023年5月19日
    00
  • C语言中的5种简单排序算法(适合小白)

    C语言中的5种简单排序算法(适合小白) 介绍 排序算法是计算机科学中最基本的算法之一,其主要目的是将一组无序的数据按照一定的规则进行排列。在计算机程序设计中,排序算法是非常常用的操作之一。 本文将会介绍C语言中5种简单的排序算法,这些算法非常适合新手上手学习。 以下是5种简单排序算法的详细介绍和实例代码。 冒泡排序(Bubble Sort) 冒泡排序也是一种…

    算法与数据结构 2023年5月19日
    00
  • JavaScript求解最长回文子串的方法分享

    JS求解最长回文子串的方法分享: 一、前置知识 在学习JS求解最长回文子串之前,你需要掌握以下知识: 严格模式 回文字符串 动态规划 二、什么是回文字符串? 回文字符串是指正着读和倒着读都一样的字符串。例如,’level’、’racecar’、’rotor’ 都是回文字符串。 三、求解最长回文子串的方法 对于字符串中的每一个字符,判断它和它往前的字符组成的子…

    算法与数据结构 2023年5月19日
    00
  • TypeScript实现十大排序算法之归并排序示例详解

    TypeScript实现十大排序算法之归并排序示例详解 简介 本文将详细介绍使用 TypeScript 实现归并排序算法的步骤和示例。归并排序是一种非常有效的排序算法,它的时间复杂度为 O(nlogn),在大多数情况下都比快速排序更加稳定和可靠。 步骤 归并排序是一种典型的分治算法,其基本思路是将待排序的数组不断分割为较小的数组,直到每个小数组只有一个元素,…

    算法与数据结构 2023年5月19日
    00
  • JavaScript之排序函数_动力节点Java学院整理

    JavaScript之排序函数_动力节点Java学院整理 背景 在JavaScript中,排序是一项非常常见的操作,在很多应用中都需要用到排序函数。了解和掌握排序函数的使用方法,可以大大提升我们编写JavaScript程序的效率。 排序函数的定义 在JavaScript中,排序函数是Array对象中的一个方法,用于对数组进行排序。其基本的语法格式如下: ar…

    算法与数据结构 2023年5月19日
    00
  • MS-office计算机二级选择题大全

    MS-office计算机二级选择题大全攻略 为了帮助读者顺利通过MS-office计算机二级考试,我整理了以下的攻略: 1. 熟悉考试内容 首先要熟悉考试的内容,明确各个模块的考试重点,掌握考试的基本知识点和技巧,不仅能够提高备考效率,也能在考试时更加得心应手。 2. 做足练习 除了熟悉考试内容之外,还需要通过做题来掌握一些技巧和方法。需要多做相关题目和模拟…

    算法与数据结构 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
合作推广
合作推广
分享本页
返回顶部