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日

相关文章

  • 用C语言实现二分查找算法

    当实现查找某个元素时,一个常见的算法是二分查找(Binary Search),也称作折半查找。二分查找是一种在有序数组中查找某一特定元素的搜索算法,将目标值与数组的中间元素进行比较,如果中间元素大于目标值,则在左半部分继续查找;如果中间元素小于目标值,则在右半部分继续查找。重复以上步骤,直到找到目标值或者确定目标值不存在。 以下是在C语言中实现二分查找的完整…

    算法与数据结构 2023年5月19日
    00
  • C++实现快速排序(Quicksort)算法

    C++实现快速排序(Quicksort)算法 快速排序(Quicksort)算法是一种常见的排序算法,具有快速、高效、稳定性好等特点,广泛应用于各种工程实践中。 快速排序的基本思想 快速排序的基本思想是:选取一个基准值(pivot),将待排序序列划分成左右两个子序列,左边的子序列中所有元素都不大于基准值,右边的子序列中所有元素都不小于基准值,然后对左右两个子…

    算法与数据结构 2023年5月19日
    00
  • JS实现数组按升序及降序排列的方法

    JS实现数组按升序和降序排列的方法有很多种,下面我将从简单到复杂分享几种方法。 sort()方法 sort()方法是JS的一个数组方法,可以对数组排序。它有一个可选的排序函数,用于规定排序规则。 升序排列: let arr = [3, 1, 4, 7, 2]; arr.sort((a, b) => a – b); console.log(arr); /…

    算法与数据结构 2023年5月19日
    00
  • Java 堆排序实例(大顶堆、小顶堆)

    下面我将为您介绍 Java 堆排序实例(大顶堆、小顶堆)的完整攻略。 1. 堆排序介绍 堆排序是一种树形选择排序方法,它的特点是将数组看成一棵完全二叉树,然后通过建立堆(一种特殊的完全二叉树),逐个取出堆顶元素并重新建堆的过程来进行排序。具体来说,堆排序可以分为两种:大顶堆排序和小顶堆排序。 在大顶堆排序中,堆顶元素最大,从小到大进行排序;在小顶堆排序中,堆…

    算法与数据结构 2023年5月19日
    00
  • C语言直接选择排序算法详解

    C语言直接选择排序算法详解 什么是选择排序算法 选择排序算法(Selection Sort)是一种简单直观的排序算法。该算法每次从未排序的数中选择最小(或最大)的一个数,将其放在已排序数列的末尾,直到所有数排序完成。因为该算法在每次排序后的下一轮排序不会再考虑之前选择的最小(或最大)值,所以属于不稳定排序算法。 算法流程 选择排序算法主要分为两个步骤: 在未…

    算法与数据结构 2023年5月19日
    00
  • C语言排序算法之选择排序(直接选择排序,堆排序)

    C语言排序算法之选择排序 选择排序概述 选择排序是一种简单直观的排序算法,其基本思想是:每一趟从数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列最后,直到全部数据元素排完为止。 选择排序算法的时间复杂度为O(n^2),在数据规模较小时效率较高,但是在数据规模较大时效率较低。 选择排序示例 以下是一个使用选择排序算法对数组进行排序的示例: #in…

    算法与数据结构 2023年5月19日
    00
  • 异常点/离群点检测算法——LOF解析

    异常点/离群点检测算法——LOF解析 什么是离群点(Outlier)? 在数据分析领域中,离群点通常指的是数据集中与其他数据点显著不同的数据点,也就是说,离群点是远离其他数据点的数据点。离群点检测是一个非常重要的数据挖掘任务,被广泛应用于异常检测、金融欺诈检测、医学诊断等领域。 LOF算法简介 LOF (Local Outlier Factor) 算法是一种…

    算法与数据结构 2023年5月19日
    00
  • js实现常用排序算法

    JS实现常用排序算法 排序算法是计算机领域中的重要算法之一,其作用是将一组无序的数据按照一定的规则进行排列,便于数据的查找和统计。在前端开发领域中,JS是常用的编程语言,下面一起来详细讲解如何用JS实现常用排序算法。 冒泡排序 冒泡排序是一种简单的排序算法,其具体思路是对需要排序的元素从头开始进行比较,如果前一个元素比后一个元素大,就交换这两个元素的位置,一…

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