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日

相关文章

  • 你有必要知道的10个JavaScript难点

    你有必要知道的10个JavaScript难点 1. 变量提升 JavaScript 中的变量提升是指 JS 引擎将变量声明提升到作用域的顶部,即在变量声明之前就能访问该变量。变量提升会造成变量值的不确定性,应该格外注意。 例如: x = 5; console.log(x); var x; 这个例子中,虽然变量 x 的值在声明之前被赋值为 5,但是在变量声明之…

    JavaScript 2023年5月18日
    00
  • 浏览器加载、渲染和解析过程黑箱简析

    浏览器加载、渲染和解析过程黑箱简析 浏览器是用户访问互联网的主要工具之一,那么浏览器是如何加载、渲染和解析网页的呢?这里我们将对这个过程进行完整的攻略。 加载过程 浏览器加载过程主要有以下几个步骤: 浏览器通过DNS查询获取域名对应的IP地址 浏览器向服务器发送HTTP请求,请求获取相应的HTML文件 服务器响应HTTP请求,将HTML文件返回给浏览器 浏览…

    JavaScript 2023年6月11日
    00
  • 如何在CocosCreator中做一个List

    现在我来为您详细讲解如何在CocosCreator中做一个List的完整攻略。 1、创建List节点 首先我们需要在CocosCreator中用节点编辑器来创建一个List节点。创建节点的方式可以在菜单栏中选择Creator > Create Node。然后输入节点的名称并点击确定,此时我们将会得到一个空的节点。 2、添加List组件 在这个空节点上添…

    JavaScript 2023年6月11日
    00
  • asp.net(C#)中给控件添加客户端js事件的方法

    给控件添加客户端js事件是asp.net(C#)开发中的常见需求,我们可以通过以下步骤完成: 第一步:在aspx页面中引入js文件 在aspx页面中需要引入相应的js文件,例如: <script type="text/javascript" src="~/scripts/jquery-3.6.0.min.js"&…

    JavaScript 2023年6月11日
    00
  • javascript中eval解析JSON字符串

    JavaScript中的eval()函数可以将JSON格式的字符串解析为可操作的JavaScript对象,从而方便地在应用程序中使用。下面就是详细的攻略: 什么是JSON字符串? JSON(JavaScript对象表示法)是一种轻量级的数据交换格式,用于存储和交换数据。它基于JavaScript语法,但具有更宽泛的应用范围,因为许多编程语言都支持它。 JSO…

    JavaScript 2023年5月27日
    00
  • JavaScript Math.round() 方法

    当我们需要对一个数进行四舍五入操作时,可以使用 JavaScript 的 Math.round() 方法。该方法接收一个数字参数,并将它四舍五入为一个整数。 使用语法: Math.round(x) 其中x是一个数字参数,表示要进行四舍五入操作的数字。 下面我们来看两个示例: 示例1: var num1 = 3.14; var num2 = 6.75; con…

    JavaScript 2023年5月27日
    00
  • javascript中eval函数用法分析

    JavaScript中eval函数用法分析 在 JavaScript 中,eval() 函数是一个非常有用的函数,可以用来执行字符串中的代码。本文将分析 eval() 函数的用法及其潜在的安全问题。 什么是eval函数 eval() 函数是 JavaScript 语言中的一个函数,可以将一个字符串作为代码执行。其基本语法如下: eval(string) 其中…

    JavaScript 2023年5月28日
    00
  • JS解析url参数为json对象问题

    将URL参数解析为JSON对象是JavaScript中的一项常见任务。在处理URL参数时,可以使用一些内置函数和库来使此任务变得简单。以下是一个完整的攻略,它将指导你如何使用不同的方法来解析URL参数为JSON对象: 方法一:使用URLSearchParams(推荐) URLSearchParams是在ES2015中引入的新的JavaScript API,在…

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