【问题标题】:How to get the array after nth iteration in bubble sort?如何在冒泡排序中进行第 n 次迭代后获取数组?
【发布时间】:2018-10-29 14:49:27
【问题描述】:

这是 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 迭代次数后返回数组。例如,考虑这个数组

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),它应该返回 [1, -2, 3, 4, 5, 8, 9]

【问题讨论】:

  • 如果我做对了,在i == iterbreak循环?
  • 您的代码不正确。
  • @PM77-1 嗯,你能说得更具体点吗?冒泡排序代码是我从 wiki 中提取的经典代码。
  • 你的内部循环不依赖于i
  • @PM77-1 谢谢,已修复。

标签: javascript arrays printing iteration bubble-sort


【解决方案1】:

您可以在内部使用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))

【讨论】:

  • 这几乎就是我的答案,我得到了 2 票反对。
  • @Nenad 这个函数只是打印到控制台。我希望函数在第 n 次迭代后返回该 arr。我打算稍后在我的另一个功能中使用它。
  • @theprogrammer094 它确实会在 n 次迭代后返回数组,console.log 仅用于演示。
  • 确实你是对的。我的不好,没有看到外部 for 循环。我认为这行得通。谢谢。
  • @theprogrammer094 在这种情况下你可以使用生成器jsfiddle.net/sfu9kt5h/32
【解决方案2】:

如果你想要第 N 次迭代,只需运行整个过程 N 次,然后返回结果?

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)

【讨论】:

  • 为你添加的外在增加了额外的负载并且没有任何帮助。数组将在 n 的值变为偶数 1 之前进行排序
  • 什么意思?我不明白。 bubbleSort(array,5)不会对数组排序5次然后返回结果吗?
  • 是的,没错!它会(尝试)对它进行排序比需要的多 4 次,这是额外的,并且根本不会改变数组。所要求的是在完成 N 次迭代(未完成排序)时打破循环
  • 我还是不明白。一次迭代和一次“完全排序”有什么区别?你是什​​么意思“完全排序”?这里有部分排序吗?
  • 是的,部分排序是用户在这里要求的。需要多次迭代(如果数组尚未排序)以实现完整排序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2014-10-29
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2014-05-17
相关资源
最近更新 更多