美文网首页
JavaScript实现冒泡排序 可视化

JavaScript实现冒泡排序 可视化

作者: Yong_bcf4 | 来源:发表于2020-12-20 10:48 被阅读0次
<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <style>
    #main {
      width: 600px;
      height: 200px;
      position: relative;
    }
  </style>
</head>

<body>

  <div id="main">
    <canvas id="myCanvas" width="600" height="200"> </canvas>
  </div>
  <script>
    function bubbleSort(arr) {
      // 冒泡排序算法,对数组进行排序,同时记录每一步操作,保存在一个数组中
      function sort() {
        // virtualArr 用来存放 每一个步内容的数组
        var virtualArr = [arr.slice()];
        var max = arr.length;
        for (var i = 0; i < max; i++) {
          var done = true;
          for (var j = 0; j < max - i; j++) {
            if (arr[j] > arr[j + 1]) {
              var temp = arr[j];
              arr[j] = arr[j + 1];
              arr[j + 1] = temp;
              done = false;
              virtualArr.push(arr.slice());
            }
          };
          if(done){
            break;
          };
        }
        return virtualArr;
      }

      // 绘画,调用一次就画出一步的图像 
      function darw(arr){
        var canvas = document.getElementById('myCanvas');
        var ctx = canvas.getContext('2d');
        // 获取 canvas画板的高度(确定每个长方形的 y 值时需要)
        var maxWidth = canvas.height;
        // 每个长方形的宽度
        var width = 20;
        // 每个长方形之间的间隔
        var space =20;

        // 清空画布
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        // 设置字体
        ctx.font = "18px serif";
        // 在页面上,画出一步的内容
        for (var i = 0; i < arr.length; i++) {
          ctx.fillStyle = '#61C5FE';
          // x 的 值等于 第i个长方形 * (长方形的宽+每个长方形的间隔)
          // y 的 值等于  画板的高度 - 第i的元素的值
          ctx.fillRect(i * (width+space), maxWidth - arr[i], width, arr[i]);
          ctx.fillStyle = '#240be4';
          // maxWidth - arr[i]-5,这里多- 5,是为了能让文字,在长方形上方一点显示,看的明显些
          ctx.fillText(arr[i], i * (width+space), maxWidth - arr[i]-5);
        }
      }

      // 动画 
      function animation() {
        // 调用sort 方法,返回包括每一步内容的数组
        var virtualArr = sort();
        var interval =500;
        // 遍历得到的数组,每隔500ms,调用darw 方法,画出一步内容
        virtualArr.forEach((item, index) => {
            setTimeout(() => darw(item), index * interval);
        });  
      }

      animation();
    }
    var arr = [50,40,20,10,10];
    bubbleSort(arr);
  </script>
</body>
</html>
image.png

相关文章

  • 冒泡排序的可视化

    这是IFE基础JavaScript练习(二),实现冒泡排序的可视化,用高度表示数字的大小,然后可视化的进行排序(由...

  • JS实现排序算法

    原文:常见排序算法之JavaScript实现 - 知乎 目录 冒泡排序 选择排序 插入排序 合并排序 快速排序 1...

  • JavaScript实现经典排序算法

    使用JavaScript实现的经典排序算法 util 冒泡 简单选择 直接插入 快速排序 堆排序 归并排序

  • 2019-08-11

    Javascript中常用几种基础算法 1 排序-冒泡排序 //冒泡排序 function bubbleSort...

  • JavaScript实现冒泡排序

    原创博客,欢迎转载和交流。之前写过快速排序算法,今天就把最简单的冒泡排序算法也分享下,其实很早之前就写过,一直没分...

  • Js 实现基础排序算法

    本文使用 JavaScript 实现的基础的 8 种排序算法,复杂度归纳如下:O(n^2) ——冒泡排序、插入排序...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • python 常用排序算法

    可视化 冒泡排序 选择排序 插入排序 希尔排序 快速排序 堆排序 基数排序 归并排序

  • 看图说话排序算法之冒泡排序

    排序算法的种类非常多,这里总结冒泡排序和对冒泡排序的改进---快速排序的循环实现和递归实现。 一丶冒泡排序 假设待...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

网友评论

      本文标题:JavaScript实现冒泡排序 可视化

      本文链接:https://www.haomeiwen.com/subject/sohogktx.html