Javascript 中的冒泡排序算法

Bubble Sort Algorithm in Javascript

我这里有这个冒泡排序算法

let bubbleSort = (array) => {
  for (let j=0;j<array.length;j++) {
    for (let i=0;i<array.length;i++) {
      if(array[i] > array[i+1]) {
      let temp = array[i];
      array[i] = array[i+1];
      array[i+1] = temp;
      }
     }
    }
   return array;
  }

我明白它是如何工作的,但我不明白 if 语句的含义:

      let temp = array[i];
      array[i] = array[i+1];
      array[i+1] = temp;

编辑: 我无法将所有答案标记为已解决,但它们对我有所帮助。谢谢!

这三行交换 ii+1 索引的元素。

你可以只写

array[i] = array[i+1];
array[i+1] = array[i];

交换元素,因为在这个版本中,执行第一行后,array[i] 的原始值丢失,因为它已被值 array[i+1].[=18= 覆盖]

要解决此问题,可以将值 array[i] 存储在一个临时变量中(此处称为 temp),以便稍后可以将其分配给 array[i+1].

它是交换数组中当前元素和下一个元素的值。

类似这样的问题

   1. array[i] = array[i+1];
   2. array[i+1] = array[i]

是在第一个赋值中你用array[i+1]覆盖了array[i]的常规值,这样你就可以在第二行赋给array[i+1]相同的值,因此你使用 temp 变量存储 array[i] 的原始值,以便在第 1

行赋值后具有此值
  1 let temp = array[i];
  2 array[i] = array[i+1];
  3 array[i+1] = temp;

在第一行中,您基本上将数组 [i] 的原始值存储到稍后重新分配数组 [i+1] 时用它

如果要在数组中的某个位置放置新值,该位置的旧值将被覆盖。

const arr = [0, 1, 3, 2]

我们将以此数组为例。如果我想交换 arr[2]arr[3] 的值,我可以从设置 arr[2] = arr[3] 开始,结果如下。您会注意到值 3 现在丢失了!

 const arr = [0, 1, 2, 2]

这就是您创建 temp 变量的原因。临时存储将被覆盖的值。这是索引 2 的示例:

 // array = [0, 1, 3, 2]
 let temp = array[2];      
 // temp = 3
 // array = [0, 1, 3, 2]
 array[2] = array[2+1];
 // temp = 3
 // array = [0, 1, 2, 2]
 array[2+1] = temp;
 // array = [0, 1, 2, 3]