如何在冒泡排序中第n次迭代后获取数组?

How to get the array after nth iteration in bubble sort?

这是 javascript 中的冒泡排序算法(为简洁起见删除了 swap 函数)

const bubbleSort = (arr, iter) => {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        swap(arr, j, j + 1);
      }
    }
  }
  return arr;
};

第二个参数iter表示迭代。我希望此方法在 iter 次迭代后 return 数组。例如,考虑这个数组

array = [3, 5, 8, 4, 1, 9, -2]

After iteration 1: array = [3, 5, 4, 1, 8, -2, 9]  
After iteration 2: array = [3, 4, 1, 5, -2, 8, 9]  
.  
.  
After iteration 5: array = [1, -2, 3, 4, 5, 8, 9]  
After iteration 6: array = [-2, 1, 3, 4, 5, 8, 9]

所以基本上如果我调用 bubblesort(array, 5),它应该 return [1, -2, 3, 4, 5, 8, 9]

如果你想要第 N 次迭代,只需 运行 整个事情 N 次,然后 return 结果?

var array = [3, 5, 8, 4, 1, 9, -2]

const bubbleSort = (arr, iter) => {
  for (var n = 0; n < iter; n++) {
    for (var i = 0; i < arr.length; i++) {
      for (var j = 1; j < arr.length; j++) {
        if (arr[j - 1] > arr[j]) {
          swap(arr, j - 1, j);
        }
      }
    }
  }
  return arr;
};

bubbleSort(array,5)

您可以在内部使用 for 循环和 forEach 循环来交换元素。

let array = [3, 5, 8, 4, 1, 9, -2]

function bubblesort(arr, n) {
  for (let x = 0; x < n; x++) {
    arr.forEach((e, i) => {
      if (arr[i + 1] < e) {
        arr[i] = arr[i + 1]
        arr[i + 1] = e
      }
    })
  }
  return arr
}

console.log(bubblesort(array, 5))