【问题标题】:Bubblesort algorithm [duplicate]冒泡排序算法[重复]
【发布时间】:2021-03-24 22:04:12
【问题描述】:

我是这个论坛的新人,所以如果我发错了,我深表歉意。我在学习 Javascript 并且为了训练我做了这个冒泡排序算法:

var x = [1, 5, 2, 8, 3, 6, 4, 9, 7]; 

sort(x);

function sort(params) {
  var appoggio=0;
  for (i=0; i<params.length; i++) {
    for (j=0; j<params.length; j++) {
        appoggio=params[j];
        params[j] = params[j+1];
        params[j+1] = appoggio;
    }
  }
}

console.log(x); 

我已经制作了一个基本的 html 页面,我在其中调用了这个脚本,但它不起作用,我不明白为什么。我尝试在 for 循环中插入一些警报(params [j]),但在第一次交互之后,scrpt 会阻止所有网页。我该怎么办?

【问题讨论】:

  • 您在循环遍历数组时向数组中添加元素。这将导致无限循环。一个简单的解决方法是将数组长度存储在一个变量中。
  • 另外,这不是导致错误的原因,但您应该在 for 循环条件中使用 let 声明 ij,否则它们将成为全局变量。如for (let i=0; ...
  • “我尝试在 for 循环中插入一些 alert(params[j]) 来调试它,但在第一次交互之后,scrpt 会阻止所有网页。”真正的调试器。大多数浏览器都提供了调试和分析代码的工具,例如您可以使用 Ctrl+Shift+I 打开 DevTools

标签: javascript algorithm sorting bubble-sort


【解决方案1】:

即使您到达列表的末尾(每次都会增加长度),当您按下 j+1 时,您也会陷入无限循环。试着停在params.length-1

【讨论】:

  • 这不是 OP 代码的主要问题。没有逻辑!
  • 感谢您的回答!由于分心 XD,我完全忘记了这种情况,真正的问题是我从未意识到我要离开阵列。现在我明白我做错了什么。再次感谢:)
【解决方案2】:

缺少 if 条件!

只有当它们的排序不正确时才需要交换值。

另外,正如@MetallimaX 所说,您需要在 params.length - 1 处停止循环以避免写入数组之外

不给你答案,这会破坏一切:

for a given number of times (enough that values can bubble all the way) {
    for each adjacent values pair (from left to right) {
         if the pair is not ordered correctly {
              swap both elements()
         }
    }
}

【讨论】:

  • 我同意修复无限循环后的下一步是处理交换条件。
猜你喜欢
  • 2021-04-01
  • 2016-03-19
  • 1970-01-01
  • 2013-09-04
  • 2013-11-02
  • 2016-11-01
  • 2015-01-17
  • 2013-03-08
  • 2018-02-08
相关资源
最近更新 更多