JavaScript数组排序的六种常见算法总结

JavaScript数组排序的六种常见算法总结

一、排序算法简介

排序算法是计算机学科中最基本的算法之一,也是编程中必须要了解的重要内容。在JavaScript编程中,排序算法的应用非常广泛,尤其是在处理和展现数据方面。

二、排序算法分类

根据不同的排序方式和算法思想, 排序算法可以被分类为以下六类。

  1. 冒泡排序
  2. 选择排序
  3. 插入排序
  4. 快速排序
  5. 归并排序
  6. 希尔排序

下面将逐一介绍这六种排序算法的具体实现和使用场景。

1. 冒泡排序

冒泡排序是最简单的排序算法之一,可以用于对几乎任何类型的数据进行排序。它的基本思想是:对比相邻的两个元素,如果前一个元素大于后一个元素,则将它们交换位置,这样一轮下来就可以将列表中最大的元素移到最右边。

以下是一个简单的冒泡排序的实现。

function bubbleSort(arr) {
  var len = arr.length;
  for (var i = 0; i < len - 1; i++) {
    for (var j = 0; j < len - i - 1; j++) {
      // 如果前一个元素比后一个元素大,则交换它们的位置
      if (arr[j] > arr[j + 1]) {
        var temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

下面是一个使用冒泡排序对数组进行排序的演示示例。

var arr = [5, 3, 8, 4, 2];

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

2. 选择排序

选择排序是一种简单的排序算法,其基本思想是:找到数组中最小的元素,将其放在数组的第一位,接着找到数组中第二小的元素,将其放在数组的第二位,以此类推,直到排序完成。

以下是一个简单的选择排序的实现。

function selectionSort(arr) {
    var len = arr.length;
    var minIndex, temp;
    for (var i = 0; i < len - 1; i++) {
        minIndex = i;
        for (var j = i + 1; j < len; j++) {
            if (arr[j] < arr[minIndex]) { // 找到最小的元素
                minIndex = j; // 将最小元素的索引保存
            }
        }
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
}

下面是一个使用选择排序对数组进行排序的演示示例。

var arr = [5, 3, 8, 4, 2];

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

3. 插入排序

插入排序是一种简单的排序算法,其基本思想是:将一个元素插入到已经排好序的数组的合适位置中,以此类推,直到排序完成。

以下是一个简单的插入排序的实现。

function insertionSort(arr) {
    var len = arr.length;
    var preIndex, current;
    for (var i = 1; i < len; i++) {
        preIndex = i - 1;
        current = arr[i];
        while(preIndex >= 0 && arr[preIndex] > current) {
            arr[preIndex + 1] = arr[preIndex];
            preIndex--;
        }
        arr[preIndex + 1] = current;
    }
    return arr;
}

下面是一个使用插入排序对数组进行排序的演示示例。

var arr = [5, 3, 8, 4, 2];

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

4. 快速排序

快速排序是一种高效的排序算法,其基本思想是:选取一个值作为基准值,将比基准值小的数移动到左边,比基准值大的数移动到右边,然后对左右两个子数组分别执行此操作,直到子数组中只有一个元素。

以下是一个简单的快速排序的实现。

function quickSort(arr) {
    if (arr.length <= 1) { // 如果数组只有一个元素,直接返回
        return arr;
    }
    var pivotIndex = Math.floor(arr.length / 2); // 取基准值的索引
    var pivot = arr.splice(pivotIndex, 1)[0]; // 取出基准值,并将其从数组中删除
    var left = [];
    var right = [];
    for (var 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));
}

下面是一个使用快速排序对数组进行排序的演示示例。

var arr = [5, 3, 8, 4, 2];

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

5. 归并排序

归并排序是一种基于归并操作的排序算法,其基本思想是:将两个有序数组归并成一个更大的有序数组,以此类推,直到整个数组有序为止。

以下是一个简单的归并排序的实现。

function mergeSort(arr) {
    var len = arr.length;
    if (len < 2) { // 如果数组只有一个元素,直接返回
        return arr;
    }
    var middle = Math.floor(len / 2), // 取中间值
        left = arr.slice(0, middle),
        right = arr.slice(middle);
    return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right) {
    var 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;
}

下面是一个使用归并排序对数组进行排序的演示示例。

var arr = [5, 3, 8, 4, 2];

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

6. 希尔排序

希尔排序是一种改进版的插入排序算法,它的基本思想是:将一个数组分成若干个子数组,分别对这些子数组进行插入排序,待整个数组中的元素基本有序时,再对整个数组进行一次插入排序。

以下是一个简单的希尔排序的实现。

function shellSort(arr) {
    var len = arr.length,
        temp,
        gap = 1;
    while(gap < len/3) { // 计算间隔序列
        gap = gap * 3 + 1;
    }
    for (gap; gap > 0; gap = Math.floor(gap/3)) {
        for (var i = gap; i < len; i++) {
            temp = arr[i];
            for (var j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
                arr[j + gap] = arr[j];
            }
            arr[j + gap] = temp;
        }
    }
    return arr;
}

下面是一个使用希尔排序对数组进行排序的演示示例。

var arr = [5, 3, 8, 4, 2];

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

以上就是JavaScript数组排序的六种常见算法的具体实现和应用场景。在实际开发中,我们可以根据不同场景选择不同的排序算法,以实现最佳性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript数组排序的六种常见算法总结 - Python技术站

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

相关文章

  • 一道JS前端闭包面试题解析

    下面我来为你讲解一道 JS 前端闭包面试题的完整攻略。 面试题 下面是面试题的题目与内容: for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 0); } 要求输出 0, 1, 2, 3, 4,但是实际上却是输出了 5, 5, 5, 5, 5。请问这是为什么?…

    算法与数据结构 2023年5月19日
    00
  • c语言5个常用的排序算法实例代码

    C语言5个常用的排序算法实例代码 本文旨在讲解C语言中常用的5种排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。以下将逐一介绍它们的实现过程,并提供示例代码。 冒泡排序(Bubble Sort) 算法思想:冒泡排序是一种简单的排序算法,它会首先比较相邻的元素,如果它们的顺序不正确,就交换它们的位置。这样一遍比较下来,最后一个元素就已经是最大的…

    算法与数据结构 2023年5月19日
    00
  • c++入门必学库函数sort的基本用法

    一、sort函数的基本介绍 sort()函数是C++ STL标准库提供的一种排序函数,能够对数组或容器进行排序。可以用于排序基本数据类型、结构体、对象等各种数据类型。其中,数组的排序时简单易行的,容器的排序则更加强大方便。 sort()的函数原型如下: template<class RandomAccessIterator> void sort(…

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法类实例

    让我先给出该攻略的大纲: 算法类的设计思路 冒泡排序算法示例 快速排序算法示例 使用算法类进行排序 接下来,我将详细讲解每一步内容。 1. 算法类的设计思路 首先,我们需要为排序算法创建一个类,这个类应该包含常见排序算法的实现函数。这些函数应该是静态函数,以便我们可以直接访问它们,而不必实例化排序类。 我们还需要实现一些通用的辅助函数,这些函数可以在算法函数…

    算法与数据结构 2023年5月19日
    00
  • JS实现数组随机排序的三种方法详解

    JS实现数组随机排序的三种方法详解 在JavaScript中,实现数组的随机排序是十分常见的需求。本篇文章将讲解三种实现数组随机排序的方法。 方法一:Fisher-Yates算法 Fisher-Yates算法(也被称为 Knuth算法)是实现数组随机排序最常用的算法之一。该算法的思路很简单,即从数组末尾开始,将当前位置的数与它之前的任意一个数交换顺序,直到数…

    算法与数据结构 2023年5月19日
    00
  • 常用的C语言排序算法(两种)

    常用的C语言排序算法(两种) 排序算法是计算机程序员经常用到的算法,在实际的开发中排序算法往往可以提升程序的效率。在C语言中常用的排序算法有很多种,其中比较常见的包括快速排序和冒泡排序两种。 快速排序 快速排序(Quick Sort)是一种分而治之的思想,它通过在数据集合中挑选一个基准数,将数据集合分成两部分,一部分大于基准数,一部分小于基准数,然后对这两部…

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

    下面是“C语言实现快速排序算法实例”的完整攻略: 快速排序算法简介 快速排序是一种高效的排序算法,属于比较排序中的一种,采用分治策略,通过将原序列划分为若干个子序列依次排序,最终得到有序序列。该算法的平均时间复杂度为O(nlogn),最坏情况下的时间复杂度为O(n^2),因此在实际应用中要根据数据规模和数据分布情况选择合适的算法。 C语言快速排序实现示例 下…

    算法与数据结构 2023年5月19日
    00
  • 微信红包随机生成算法php版

    下面我会详细讲解“微信红包随机生成算法php版”的完整攻略。 算法简介 微信的红包算法采用的是二倍均值法,即将总金额分成若干个等份,然后按照一定的规则分配给每个红包领取者,使得每个红包领取者所得到的金额期望相等。具体来说,就是按照以下步骤来生成红包: 首先获取红包数量和总金额。 计算出每个红包的最大金额,即 max = totalAmount / num *…

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