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

yizhihongxing

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语言实现的几种常用排序算法 简介 排序是算法中最基本的任务之一,其目的是将一系列元素按照一定的顺序进行排列。在实际开发中,排序算法被广泛应用,如数据分析、数据库查找等场景。在C语言中,有多种常用的排序算法,本文将详细介绍几种排序算法的实现方法。 冒泡排序(Bubble Sort) 冒泡排序是一种基本的排序算法,其原理是通过多次比较和交换来实现排序。其实现过…

    算法与数据结构 2023年5月19日
    00
  • JS实现常见的查找、排序、去重算法示例

    JS实现常见的查找、排序、去重算法示例 在 JavaScript 中,常见的算法题目也非常多,其中最常见的算法大致可以分为三类,即查找、排序和去重。在这里将对这三个方面中比较常用的算法进行一一解析,以期能够帮助大家更好的理解和掌握这些算法的使用。 一、查找 1. 二分查找 在排序好的数组中查找一个值,如何快速地找到这个值呢?这时候可以使用二分查找算法。它的原…

    算法与数据结构 2023年5月19日
    00
  • 详解高性能缓存Caffeine原理及实战

    详解高性能缓存Caffeine原理及实战 简介 Caffeine是一个基于Java的高性能缓存库,其目标是提供比ConcurrentHashMap更高效、更灵活的缓存方案。Caffeine支持多种缓存策略、过期机制以及可自定义的缓存加载策略等功能。本文将详细介绍Caffeine的原理、使用方法及实现实例。 Caffeine的原理 Caffeine的核心是一个…

    算法与数据结构 2023年5月19日
    00
  • JS实现的冒泡排序,快速排序,插入排序算法示例

    为了给大家更好的理解,这里先介绍一下这三种排序算法的基本思想: 冒泡排序:依次比较相邻两个元素的大小,将较大的元素往后移动,每一轮比较都可以确定一个最大的元素,因此需要进行N-1轮。 快速排序:选定一个中心点,将小于这个中心点的元素排在左边,大于这个中心点的元素排在右边,然后分别对左右两边的元素重复这个操作。 插入排序:将数组按升序排列,一次将每个元素插入到…

    算法与数据结构 2023年5月19日
    00
  • 前端JavaScript多数元素的算法详解

    前端JavaScript多数元素的算法详解 算法介绍 多数元素在一个数组中出现次数超过一半的元素,因此要找到多数元素,需要考虑其出现次数是否超过了数组长度的一半。本文介绍三种常见的多数元素算法,分别为排序法、哈希表法和摩尔投票法。 排序法 排序法的思路是先对数组进行排序,然后返回数组中间的那个元素即可。由于多数元素出现次数超过了数组长度的一半,因此排序后中间…

    算法与数据结构 2023年5月19日
    00
  • c++实现二路归并排序的示例代码

    C++实现二路归并排序是一种常用的排序算法,本文将介绍该算法的详细实现过程,并提供一些示例说明。 一、简述二路归并排序的原理 二路归并排序是一种基于分治思想的排序算法。核心思想是把一个待排序的序列,不断地拆分为两个子序列,直至每个子序列只剩下一个元素,然后利用递归思想将这些子序列不断地两两合并,最终得到一个有序的序列。 二、C++实现二路归并排序的示例代码 …

    算法与数据结构 2023年5月19日
    00
  • C++实现选择性排序(SelectionSort)

    C++实现选择性排序(SelectionSort) 选择性排序(Selection Sort)是计算机科学中一种简单直观的排序算法。它的工作原理是:首先在未排序的数列中找到最小(大)的元素,然后将其存放到数列的起始位置,接着再从剩余的未排序元素中继续寻找最小(大)的元素,然后放到已排序序列的末尾。以此类推,直到所有元素均被排序完毕。 具体的实现步骤如下: 在…

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法系列之桶排序详解

    PHP排序算法系列之桶排序详解 什么是桶排序? 桶排序是一种简单的排序算法,通过将待排序数组元素分别放到对应的桶中,然后在桶中对元素进行排序,最后将所有桶中元素合并得到有序的数组。 桶排序的步骤 创建一个数组作为桶,数组大小为待排序数组中的最大值加1,数组中每个元素初始化为0。 遍历待排序数组,将每个元素放到对应的桶中,即桶数组中下标为待排序元素的值的元素加…

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