JS插入排序简单理解与实现方法分析

JS插入排序简单理解与实现方法分析

描述

插入排序是一种比较简单的排序方法,它的核心思想是将待排序的元素,依次插入到已经排好序的部分,从而逐渐将整个序列排好。具有较好的稳定性和适用性。

实现思路

插入排序的实现思路:

  1. 将第一个元素当做已经排序好的序列
  2. 从第二个元素开始遍历整个数组
  3. 回溯已经排序好的序列,将当前元素插入到比它大的元素之前
  4. 重复2、3步骤直到排序完成

代码实现

下面是JavaScript实现插入排序的示例代码:

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

示例解析

为了更好地理解插入排序的实现方法,我们将使用以下两个示例来帮助我们分析。

示例1:

给定数组 [3, 1, 6, 2, 9, 10] ,使用插入排序算法进行排序。

首先将数组下标为0的元素3视为已排序的序列,从下标为1的元素1开始遍历数组, 当前元素为1,需要将1插入到已排序的序列中。

  1. 将1与已排序的序列中最后一个元素(3)比较,如果1小于3,则将1插入到(3前面的位置)。

    [3, 1, 6, 2, 9, 10]
    // 1 < 3
    [1, 3, 6, 2, 9, 10]

  2. 继续遍历数组,当前元素为6,需要将6插入到已排序的序列中。

    [1, 3, 6, 2, 9, 10]
    // 6 > 3
    [1, 3, 6, 2, 9, 10]

  3. 继续遍历数组,当前元素为2,需要将2插入到已排序的序列中。

    [1, 3, 6, 2, 9, 10]
    // 2 < 6
    [1, 3, 2, 6, 9, 10]
    // 2 < 3
    [1, 2, 3, 6, 9, 10]

  4. 继续遍历数组,当前元素为9,需要将9插入到已排序的序列中。

    [1, 2, 3, 6, 9, 10]
    // 9 > 6
    [1, 2, 3, 6, 9, 10]

    当前元素为10,需要将10插入到已排序的序列中。

    [1, 2, 3, 6, 9, 10]
    // 10 > 9
    [1, 2, 3, 6, 9, 10]

最终排序结果为[1, 2, 3, 6, 9, 10]

示例2:

给定数组 [-2, 45, 0, 11, -9] ,使用插入排序算法进行排序。

首先将数组下标为0的元素-2视为已排序的序列,从下标为1的元素45开始遍历数组, 当前元素为45,需要将45插入到已排序的序列中。

  1. 将45与已排序的序列中最后一个元素(-2)比较,如果45大于-2,则将45插入到-2后的位置。

    [-2, 45, 0, 11, -9]
    // 45 > -2
    [-2, 45, 0, 11, -9]

  2. 继续遍历数组,当前元素为0,需要将0插入到已排序的序列中。

    [-2, 45, 0, 11, -9]
    // 0 > -2
    [-2, 0, 45, 11, -9]

  3. 继续遍历数组,当前元素为11,需要将11插入到已排序的序列中。

    [-2, 0, 45, 11, -9]
    // 11 > 0
    [-2, 0, 11, 45, -9]
    // 11 < 45
    [-2, 0, 11, 45, -9]

  4. 继续遍历数组,当前元素为-9,需要将-9插入到已排序的序列中。

    [-2, 0, 11, 45, -9]
    // -9 < 0
    [-2, -9, 0, 11, 45]

最终排序结果为[-2, -9, 0, 11, 45]

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS插入排序简单理解与实现方法分析 - Python技术站

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

相关文章

  • C语言 扩展欧几里得算法代码

    下面我来为你详细讲解一下“C语言 扩展欧几里得算法代码”的完整攻略。 什么是扩展欧几里得算法? 扩展欧几里得算法是求解两个整数 a、b 的最大公约数(Greatest Common Divisor,简称 GCD)的一种算法。该算法可以不仅计算出最大公约数,还可以得到一组关于 a、b 的贝祖等式的整数解和一些运算过程。 算法流程 扩展欧几里得算法的流程如下: …

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

    c++冒泡排序详解 本文将对c++中的冒泡排序算法进行详解,并提供两个示例以方便读者理解。 冒泡排序的原理 冒泡排序算法通过不断比较相邻两个元素的大小,如果发现顺序不对就交换它们的位置,经过一次比较后就能确定一个元素的最终位置,再对剩余未排序的元素重复进行相同的操作,直到所有元素按照大小顺序排列完成。它的名字“冒泡”的意思即为像水泡一样,大的元素会一步一步向…

    算法与数据结构 2023年5月19日
    00
  • C#实现优先队列和堆排序

    C#实现优先队列和堆排序攻略 什么是优先队列? 优先队列(Priority Queue)是在数据结构中使用频率很高的一种类型,它的主要特点是能够在数据插入时将数据进行优先级的排序。 并且每次取出数据时取的是优先级最高的数据。 通常情况下我们使用最大堆来实现优先队列。 最大堆是一种特殊的堆,它的特点是每个结点都大于等于它的子结点。 什么是堆排序? 堆排序是一种…

    算法与数据结构 2023年5月19日
    00
  • 如何用JavaScript学习算法复杂度

    下面是关于如何用JavaScript学习算法复杂度的完整攻略: 1. 什么是算法复杂度? 算法复杂度指的是算法运行时间与输入数据规模之间的关系。通常使用大O表示法来表示算法的时间复杂度,即在最坏情况下,算法需要执行的基本操作次数和输入规模n的关系。从时间复杂度的角度出发,我们可以比较不同的算法及其优劣。 2. JavaScript中如何编写算法 JavaSc…

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

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

    算法与数据结构 2023年5月19日
    00
  • c语言实现的几种常用排序算法

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

    算法与数据结构 2023年5月19日
    00
  • Java中sort排序函数实例详解

    Java中sort排序函数实例详解 在Java中,Sort排序函数可以对数组进行排序,它是Java内置的一个排序函数。通过使用这个函数,可以快速、方便地对数组进行排序。 Syntax 以下是sort函数的语法: public static void sort(int[] arr) 其中arr是要排序的数组。 Parameters 以下是sort函数的参数: …

    算法与数据结构 2023年5月19日
    00
  • C C++算法题解LeetCode1408数组中的字符串匹配

    C C++算法题解LeetCode1408数组中的字符串匹配 问题描述 给定字符串数组 words,在其中找到两个不同的单词,使得它们的长度之和最长。可以假设 words 中至少存在两个单词。 返回两个单词长度之和的最大值。 解题思路 方法一:暴力枚举 我们可以将字符串数组中的字符串两两组合,计算它们的长度之和并更新最大值,最后返回最大值即可。 时间复杂度:…

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