【问题标题】:Bubble Sort algo sorting items in descending order - JavaScript冒泡排序算法按降序排序项目 - JavaScript
【发布时间】:2017-10-06 23:13:14
【问题描述】:

以下是我的冒泡排序代码,它只对数组进行降序排序。但是我正在尝试仅通过升序对其进行排序。请让我知道我哪里做错了。

var a = [53, 11, 34, 12, 18];

for(var i = 0; i < a.length; i++) {
    for(var j=0; j < a.length; j++) {
        if(a[i] > a[j]) {
            var temp = a[i];
            a[i] = a[j];
            a[j] = temp;        
        }
    }
}

console.log("Array:: ", a);

【问题讨论】:

  • 唯一比较项目的操作是a[i] &gt; a[j]。你如何扭转这种关系?
  • @Ryan 我认为 trincot 建议的方法比您交换评论更好
  • 嗯,我浏览了这个问题,并没有注意到您实际上并没有进行冒泡排序。通常会有一个sorted 标志,它在循环开始时被重置并在执行交换时设置,对于 Θ(n) 最佳情况而不是 Θ(n²)。您在这里所拥有的是 selection 排序的错误实现。

标签: javascript algorithm sorting bubble-sort


【解决方案1】:

只需交换声明 a[i] &lt; a[j] 而不是 a[i] &gt; a[j]

var a = [53, 11, 34, 12, 18];

for(var i = 0; i < a.length; i++) {
    for(var j=0; j < a.length; j++) {
        if(a[i] < a[j]) {
            var temp = a[i];
            a[i] = a[j];
            a[j] = temp;        
        }
    }
}

console.log("Array:: ", a);

【讨论】:

  • 顺便说一句,试着先按照 Ryan 的建议去做......我有点太急于在这里给出完整的答案:)
【解决方案2】:

在适当的冒泡排序中,内部循环不应每次都迭代所有值。你的内循环必须从i+1开始:

for(var j=i+1; j < a.length; j++) {

var a = [53, 11, 34, 12, 18];

for(var i = 0; i < a.length; i++) {
    for(var j=i+1; j < a.length; j++) {
        if(a[i] > a[j]) {
            var temp = a[i];
            a[i] = a[j];
            a[j] = temp;        
        }
    }
}

console.log("Array:: ", a);

【讨论】:

  • 啊是的就是这种情况......最好的解决方案,而不是更改 if 语句
猜你喜欢
  • 2021-04-26
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2016-11-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多