冒泡排序仅对数组的一部分进行排序

Posted

技术标签:

【中文标题】冒泡排序仅对数组的一部分进行排序【英文标题】: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]; - 你得到了什么?你知道为什么不一样吗? 【参考方案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));

【讨论】:

以上是关于冒泡排序仅对数组的一部分进行排序的主要内容,如果未能解决你的问题,请参考以下文章

[javaSE] 数组(排序-冒泡排序)

C++ 使用冒泡排序根据第一列对二维数组的行进行排序

冒泡排序与选择排序

冒泡排序与选择排序的比较(Python实现)

用Java编程语言对一个无序整形数组进行排序(冒泡排序,选择排序,插入排序)

冒泡排序