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

下面是“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日

相关文章

  • 把js文件编译成dll供页面调用的方法

    下面我会详细讲解如何把js文件编译成dll供页面调用的方法。步骤如下: 1. 安装webpack和webpack-dev-server 首先需要全局安装webpack和webpack-dev-server。运行以下命令: npm install webpack -g npm install webpack-dev-server -g 2. 创建webpack…

    JavaScript 2023年5月27日
    00
  • JavaScript中使用自然对数ln的方法

    在JavaScript中,计算自然对数ln的方法有多种。本文将介绍两种常见的方法:使用Math库和手动计算。 使用Math库 Math库是JavaScript标准库之一,其中包括了常用的数学函数,如cos、sin、log等。其中包括了计算自然对数ln的函数:Math.log()。 使用Math.log()函数的方法非常简单,直接传入需要计算自然对数的数值即可…

    JavaScript 2023年5月27日
    00
  • Java实现与JS相同的Des加解密算法完整实例

    使用Java语言实现与JS相同的Des加解密算法,需要注意以下几个步骤: 1. 导入Java支持JS的Des加解密库 在Java中,需要导入支持JS的Des加解密库,可以使用Bouncy Castle库,也可以使用官方提供的JCE库。 Bouncy Castle库 Bouncy Castle是一个Java密码学库,它包括对许多密码学算法的支持。使用Bounc…

    JavaScript 2023年5月28日
    00
  • js 使FORM表单的所有元素不可编辑的示例代码

    js实现使FORM表单所有元素不可编辑的示例代码主要有以下三个步骤: 获取FORM表单中所有表单元素 遍历FORM表单中所有表单元素,将其属性设置为不可编辑 阻止表单的默认提交行为 下面分别讲解每个步骤的实现方法。 第一步:获取FORM表单所有表单元素 在JS中,可以通过querySelectorAll()方法获取FORM表单中所有的表单元素,如下所示: c…

    JavaScript 2023年6月10日
    00
  • Javascript Boolean valueOf 方法

    以下是关于JavaScript Boolean对象的valueOf()方法的完整攻略。 JavaScript Boolean对象的valueOf()方法 JavaScript Boolean对象的valueOf()方法返回Boolean对象的原始值。该方法常与Boolean对象的toString()方法一起使用,以将Boolean对象转换为原始的布尔值。 下…

    JavaScript 2023年5月11日
    00
  • FCKeditor 和 SyntaxHighlighter 代码高亮插件的整合

    下面是关于“FCKeditor 和 SyntaxHighlighter 代码高亮插件的整合”的详细攻略。 概述 首先我们要理解这两个插件是什么。FCKeditor是一个基于Web的WYSIWYG文本编辑器,可以方便地进行文本排版,支持多种格式,具有图形用户界面。而SyntaxHighlighter是一个代码高亮插件,可以让我们方便地将代码高亮显示,并可以自定…

    JavaScript 2023年6月11日
    00
  • JavaScript 判断一个对象{}是否为空对象的简单方法

    判断 JavaScript 对象是否为空的简单方法有很多种,下面介绍两种常用的方法: 方法一:Object.keys() 如果对象没有属性,我们可以使用 Object.keys() 方法获取不到对象的属性名,从而判断对象是否为空。 具体操作如下: function isEmptyObject(obj) { return Object.keys(obj).le…

    JavaScript 2023年5月27日
    00
  • JS动态给对象添加属性和值的实现方法

    下面是关于“JS动态给对象添加属性和值的实现方法”的完整攻略: 方式一:使用点运算符添加属性 使用点运算符添加属性非常简单,只需要在对象后加上”.”,紧接着加上新增的属性名,再赋予一个值即可。 示例一: let person = { name: ‘张三’, age: 25 }; person.gender = ‘男’; console.log(person)…

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