返回

七夕送礼:为男神亲手打造跳动的JS冒泡排序动画!

前端

七夕节献礼:用JS冒泡排序算法为男神制造怦然心动的动画!

七夕佳节,鹊桥相会,在浪漫的节日里,怎能少了用爱与代码表达心意的礼物?对于程序员男神来说,一份会“动”的算法动画,无疑是七夕节最令人心动的惊喜。我们用JavaScript,为男神亲手打造跳动的冒泡排序动画,让他在算法的律动中感受你的爱意。

冒泡排序算法:

冒泡排序是一种简单的排序算法,它的原理是:比较相邻的两个元素,如果前一个元素大于后一个元素,则交换这两个元素的位置。重复这个过程,直到没有元素需要交换为止。

JavaScript冒泡排序动画:

function bubbleSort(arr) {
  let len = arr.length;
  for (let i = 0; i < len - 1; i++) {
    for (let j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        // 交换元素
        let temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

// 创建一个无序数组
let arr = [5, 3, 1, 2, 4];

// 调用冒泡排序算法
let sortedArr = bubbleSort(arr);

// 将排序过程可视化
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

const width = canvas.width;
const height = canvas.height;

// 计算每个元素的宽度
const elementWidth = width / arr.length;

// 绘制无序数组
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, width, height);
for (let i = 0; i < arr.length; i++) {
  ctx.fillStyle = 'blue';
  ctx.fillRect(i * elementWidth, height - arr[i] * (height / 10), elementWidth, arr[i] * (height / 10));
}

// 逐步执行冒泡排序算法并绘制动画
for (let i = 0; i < len - 1; i++) {
  for (let j = 0; j < len - 1 - i; j++) {
    if (arr[j] > arr[j + 1]) {
      // 交换元素
      let temp = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = temp;

      // 绘制交换后的数组
      ctx.fillStyle = 'white';
      ctx.fillRect(0, 0, width, height);
      for (let k = 0; k < arr.length; k++) {
        ctx.fillStyle = 'blue';
        ctx.fillRect(k * elementWidth, height - arr[k] * (height / 10), elementWidth, arr[k] * (height / 10));
      }
    }
  }
}

这段代码生成了一个无序数组,并用冒泡排序算法对它进行排序。排序过程通过绘制动画来可视化,让用户能够实时看到算法的运行过程。男神可以直观地看到数组是如何从无序变为有序的,算法的奥妙就在眼前展现。

献给男神的浪漫告白:

亲爱的男神,

七夕佳节,我用代码为你献上这颗真挚的心。正如冒泡排序算法一点点将无序的数组排列整齐,我的爱意也将在你心中逐渐沉淀。

每次看到你伏案编程的身影,我的心都忍不住为之悸动。算法的世界虽繁杂深奥,但我愿意为你成为算法的解说者,让你的编程之路更加顺畅。

这份冒泡排序动画是我送给你的七夕礼物,愿它能点亮你的编程之夜,成为我们爱情的见证。

爱你的,

你的程序员女神