📜  使用 JavaScript 的冒泡排序可视化(1)

📅  最后修改于: 2023-12-03 15:22:12.841000             🧑  作者: Mango

使用 JavaScript 的冒泡排序可视化

什么是冒泡排序?

冒泡排序(Bubble Sort)是最基本的排序算法之一,它重复地遍历过要排序的数列,一次比较两个元素,如果它们的顺序错误(逆序),就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

冒泡排序的时间复杂度

冒泡排序的时间复杂度为 O(n²)

如何可视化冒泡排序?

通过可视化冒泡排序,我们可以更形象地理解冒泡排序的过程。以下是一段使用 JavaScript 的冒泡排序可视化代码示例:

// 生成随机数数组
function generateRandomArray(num) {
  const arr = [];
  for (let i = 0; i < num; i++) {
    arr.push(Math.floor(Math.random() * 100));
  }
  return arr;
}

// 冒泡排序
function bubbleSort(arr) {
  const len = arr.length;
  let temp;
  for (let i = 0; i < len - 1; i++) {
    for (let j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

// 可视化冒泡排序
function visualizeBubbleSort(num) {
  let arr = generateRandomArray(num),
    temp;
  console.log(`原始数组:${arr.join(", ")}`);

  // 排序过程可视化
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
        console.log(`第 ${i + 1} 轮,第 ${j + 1} 次交换:${arr.join(", ")}`);
      }
    }
  }
  console.log(`排序后结果:${arr.join(", ")}`);
}

// 测试用例
visualizeBubbleSort(10);

以上代码中的 visualizeBubbleSort 函数将会生成一个包含随机数的数组后,通过可视化方式演示冒泡排序的过程。在每次交换的时候输出此时数组的状态,最终输出排序后的结果。

以下是 visualizeBubbleSort(10) 的输出结果:

原始数组:0, 44, 74, 28, 42, 61, 8, 23, 26, 54
第 1 轮,第 2 次交换:0, 44, 28, 74, 42, 61, 8, 23, 26, 54
第 1 轮,第 5 次交换:0, 44, 28, 42, 74, 61, 8, 23, 26, 54
第 1 轮,第 7 次交换:0, 44, 28, 42, 61, 74, 8, 23, 26, 54
第 1 轮,第 9 次交换:0, 44, 28, 42, 61, 8, 74, 23, 26, 54
第 1 轮,第 10 次交换:0, 44, 28, 42, 61, 8, 23, 74, 26, 54
第 1 轮,第 11 次交换:0, 44, 28, 42, 61, 8, 23, 26, 74, 54
第 1 轮,第 12 次交换:0, 44, 28, 42, 61, 8, 23, 26, 54, 74
第 2 轮,第 3 次交换:0, 28, 44, 42, 61, 8, 23, 26, 54, 74
第 2 轮,第 6 次交换:0, 28, 42, 44, 61, 8, 23, 26, 54, 74
第 2 轮,第 7 次交换:0, 28, 42, 44, 8, 61, 23, 26, 54, 74
第 2 轮,第 8 次交换:0, 28, 42, 44, 8, 23, 61, 26, 54, 74
第 2 轮,第 9 次交换:0, 28, 42, 44, 8, 23, 26, 61, 54, 74
第 3 轮,第 2 次交换:0, 28, 42, 8, 44, 23, 26, 54, 61, 74
第 3 轮,第 3 次交换:0, 28, 8, 42, 44, 23, 26, 54, 61, 74
第 3 轮,第 4 次交换:0, 8, 28, 42, 44, 23, 26, 54, 61, 74
第 4 轮,第 1 次交换:0, 8, 28, 42, 23, 44, 26, 54, 61, 74
第 4 轮,第 2 次交换:0, 8, 28, 23, 42, 44, 26, 54, 61, 74
第 4 轮,第 3 次交换:0, 8, 23, 28, 42, 44, 26, 54, 61, 74
第 5 轮,第 1 次交换:0, 8, 23, 28, 42, 26, 44, 54, 61, 74
第 5 轮,第 2 次交换:0, 8, 23, 28, 26, 42, 44, 54, 61, 74
第 6 轮,第 1 次交换:0, 8, 23, 26, 28, 42, 44, 54, 61, 74
排序后结果:0, 8, 23, 26, 28, 42, 44, 54, 61, 74

从上面的输出结果可以看出,随机数数组经过冒泡排序后被正确地排序了。同时,每次交换的状态也被清楚地展现了出来,有助于我们深入理解冒泡排序算法的实现过程。