js排序动画模拟-插入排序

yizhihongxing

下面是“js排序动画模拟-插入排序”的完整攻略。

算法简介

插入排序是一种简单直观的排序算法,它的基本思想是将一个待排序的序列分成已经排好序的和未排序的两部分,每次取未排序序列中的第一个元素,插入到已排序序列中的适当位置,以此类推,直到全部元素排序完成。

算法步骤

插入排序的步骤如下:

  1. 将待排序序列第一个元素看作已经排好序的序列。

  2. 遍历待排序序列中的剩余元素,将其依次插入到已排好序的序列中。

  3. 插入过程中,从已排好序的序列的末尾开始向前比较,将待插入元素与已排序元素逐个比较,找到插入位置。

  4. 待插入元素插入到适当的位置后,已排好序的序列长度加1。

  5. 重复步骤2~4,直到待排序序列中的所有元素都插入到已排好序的序列中。

插入排序动画模拟

用JavaScript实现一个插入排序的动画模拟,可以更直观地了解插入排序的过程。具体实现步骤如下:

  1. 创建一个包含待排序数列的div容器。

  2. 在待排序数列容器中,为每个数值创建一个对应的div,用于显示它的大小。

  3. 创建一个显示排序过程的容器,用于显示每一步排序的过程。

  4. 创建一个按钮,用于触发排序动画。

  5. 在按钮的点击事件中,执行插入排序的动画模拟。

下面是一个简单的示例代码,供参考:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>插入排序动画模拟</title>
    <style>
        #container {
            margin: 50px auto;
            width: 400px;
            height: 100px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            background-color: #eee;
            padding: 10px;
        }

        .num-box {
            width: 30px;
            height: 30px;
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: #ccc;
            border: 1px solid #ccc;
        }

        #process {
            margin-top: 20px;
            width: 400px;
            height: 100px;
            background-color: #fff;
            overflow: auto;
        }
    </style>
</head>
<body>
    <div id="container"></div>
    <button id="sort-btn">开始排序</button>
    <div id="process"></div>
    <script>
        // 创建一个随机数列
        let arr = [];
        for (let i = 0; i < 10; i++) {
            arr.push(Math.floor(Math.random() * 100));
        }

        // 在容器中显示数列
        let container = document.querySelector('#container');
        for (let i = 0; i < arr.length; i++) {
            let numBox = document.createElement('div');
            numBox.classList.add('num-box');
            numBox.style.width = arr[i] + 'px';
            numBox.innerText = arr[i];
            container.appendChild(numBox);
        }

        // 点击按钮触发排序动画
        let sortBtn = document.querySelector('#sort-btn');
        sortBtn.addEventListener('click', () => {
            let processDiv = document.querySelector('#process');
            insertSortAnim(arr, processDiv);
        });

        // 插入排序动画模拟
        async function insertSortAnim(arr, processDiv) {
            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;
                showProcess(arr, processDiv);
                await sleep(1000);
            }
        }

        // 在过程容器中显示排序过程
        function showProcess(arr, processDiv) {
            let processStr = arr.join(', ');
            let processP = document.createElement('p');
            processP.innerText = processStr;
            processDiv.appendChild(processP);
        }

        // sleep函数,用于等待一段时间后再继续执行
        function sleep(ms) {
            return new Promise(resolve => setTimeout(resolve, ms));
        }
    </script>
</body>
</html>

在这个示例代码中,我们通过创建随机数列和显示数列的div来显示待排序的数列。在点击按钮事件中,我们调用了insertSortAnim函数,用于模拟插入排序的动画过程。

insertSortAnim函数的实现是一个异步函数,它通过循环遍历待排序的数列,每次将一个数值插入到已排序的数列中,并在过程容器中显示排序的过程。

在插入排序的过程中,我们通过sleep函数等待1秒钟,来模拟排序过程的延迟。同时,每一次排序过程完成后,我们都通过showProcess函数在过程容器中显示排序的过程。

通过这个示例代码,我们可以更直观地了解插入排序的过程,更好地学习算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js排序动画模拟-插入排序 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 使用Jquery实现点击文字后变成文本框且可修改

    下面就是使用 jQuery 实现点击文字后变成文本框且可修改的完整攻略。 实现思路 选中需要被点击变为文本框的元素 给元素绑定 click 事件,点击后将其内容存储在一个变量中,并将元素变为可编辑状态的文本输入框 文本输入框失去焦点时,将新的内容存储在一个变量中,并将文本输入框变为普通的元素 示例代码 HTML 结构 <div class="…

    JavaScript 2023年6月10日
    00
  • 从原生JavaScript到React深入理解

    从原生JavaScript到React深入理解攻略 React是现在前端开发中非常流行的一种框架,很多前端工程师都想学习这个框架。但是,如果你没有掌握原生JavaScript的基础,就很难对React有深入理解。因此,我们需要先从原生JavaScript入手,然后逐渐深入学习React。 1. 学习原生JavaScript 1.1 理解DOM DOM是Doc…

    JavaScript 2023年6月10日
    00
  • javascript中Date format(js日期格式化)方法小结

    下面我将详细讲解“javascript中Date format(js日期格式化)方法小结”。 简介 Date对象是Javascript同日期相关的对象,它提供了很多方便易用的日期时间操作方法。其中format方法就是在Date对象中提供的一种日期格式化的方法。 语法 Date.format(formatStr) formatStr为日期格式化字符串。常用的格…

    JavaScript 2023年5月27日
    00
  • javascript 函数的暂停和恢复实例详解

    不过需要先明确一点,本文中的“暂停和恢复”实际上指的是异步操作中的暂停和恢复,而不是 JavaScript 函数本身的暂停和恢复。 以下是一个详细的攻略,包括两个实例示例。 JavaScript 函数的暂停和恢复实例详解 什么是异步操作 在了解如何暂停和恢复异步操作之前,首先需要明确什么是异步操作。 异步操作(Asynchronous Operation)指…

    JavaScript 2023年5月28日
    00
  • 再谈Javascript中的基本类型和引用类型(推荐)

    再谈JavaScript中的基本类型和引用类型 什么是基本类型和引用类型? JavaScript中的数据类型可以分为基本类型和引用类型。基本类型包括数字、字符串、布尔值、null、undefined和Symbol;而引用类型包括对象、数组、函数等。 基本类型是指简单的数据段,而引用类型是指由多个数据段(属性)组成的对象,每个属性都可以是基本类型或引用类型。 …

    JavaScript 2023年5月18日
    00
  • js中数组对象去重的两种方法

    讲解“js中数组对象去重的两种方法”的完整攻略。 1.方法1:使用Set JavaScript中的Set是一种可以存储不重复值的集合。因此,可以通过Set来去重。 示例代码 const arr = [{id:1,name:’test’},{id:2,name:’test’},{id:1,name:’test’}] const newArr = Array.f…

    JavaScript 2023年5月27日
    00
  • JS实现的贪吃蛇游戏完整实例

    JS实现的贪吃蛇游戏完整实例 项目简介 贪吃蛇游戏是一款经典的游戏,在很多平台上都有出现。这个项目是一个用JavaScript实现的贪吃蛇游戏,玩家通过控制蛇的移动方向和吃掉生成的食物,在不碰到墙或自身的情况下尽可能地维持蛇的生命并获得高分。 用到的技术 HTML CSS JavaScript 实现思路 控制蛇的移动。通过定时器循环,不断移动蛇的位置。当蛇碰…

    JavaScript 2023年5月28日
    00
  • 解析JavaScript中的不可见数据类型

    首先我们需要了解JavaScript中的不可见数据类型。 JavaScript中有七种数据类型:Undefined、Null、Boolean、Number、String、Object和Symbol(ES6新增)。其中Undefined和Null可以称为“空数据类型”,因为它们只有一个值:undefined和null。但是这两个值在JavaScript的底层实…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部