【问题标题】:Bubble Sort only sorting part of an array冒泡排序仅对数组的一部分进行排序
【发布时间】:2020-04-08 05:26:47
【问题描述】:

我正在尝试使用冒泡排序对这个数组进行排序,

var blocks = ["50", "90", "70", "40", "190", "110", "300", "30", "60", "245"];

但由于某种原因,我在排序后打印出数组时只得到 110,190,245,30,300,40,50,60,70,90。

这是排序的代码

      $("#bubble").click(function(){

        for(var i=0; i<blocks.length; i++){
          for(var j=0; j<blocks.length-i-1; j++){
            if(blocks[j]> blocks[j+1]){
              var temp = blocks[j];
              blocks[j] = blocks[j+1];
              blocks[j+1] = temp;
            }
          }
        }
        var x = blocks.toString();
        $("#blocks_container").append(x);

});

【问题讨论】:

  • 看起来排序正确。为什么你认为它只是数组的“一部分”?
  • 更改为var blocks = [50, 90, 70, 40, 190, 110, 300, 30, 60, 245]; - 你得到了什么?你知道为什么不一样吗?

标签: javascript jquery arrays sorting


【解决方案1】:

您正在排序字符串而不是数字。按词法值比较时,比较第一个字符,如果相同,则比较第二个字符,依此类推。在这种情况下,100“小于”20,因为12 之前。

如果您想按数值比较项目,请使用 + 运算符将它们转换为数字:

+blocks[j] > +blocks[j + 1]

例子:

var blocks = ["50", "90", "70", "40", "190", "110", "300", "30", "60", "245"];

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

console.log(blocks);

【讨论】:

    【解决方案2】:

    排序算法没问题。但是,您正在比较 string 值,这就是您得到意外结果的原因。

    但是,您可以使用+ 符号和map 函数将string 转换为int

    blocks = blocks.map(b => +b);
    

    然后排序就会正确完成:

    var blocks = ["50", "90", "70", "40", "190", "110", "300", "30", "60", "245"];
    
    
    const bubbleSort = (blocks) => {
        blocks = blocks.map(b => +b);
     
        for (var i = 0; i < blocks.length; i++) {
           for (var j = 0; j < blocks.length - i - 1; j++) {
               if (blocks[j] > blocks[j + 1]) {
                   var temp = blocks[j];
                   blocks[j] = blocks[j + 1];
                   blocks[j + 1] = temp;
               }
           }
         }
         return blocks;
      }
    
      console.log(bubbleSort(blocks));

    【讨论】:

      猜你喜欢
      • 2020-05-17
      • 2020-07-17
      • 2017-05-29
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 2016-02-10
      • 1970-01-01
      相关资源
      最近更新 更多