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

Javascript 气泡排序仅对数组的一部分进行排序,javascript,jquery,arrays,sorting,Javascript,Jquery,Arrays,Sorting,我尝试使用冒泡排序来排序这个数组 var blocks = ["50", "90", "70", "40", "190", "110", "300", "30", "60", "245"]; 但是由于某种原因,当我在排序后打印出数组时,我只得到110190245,30300,40,50,60,70,90 这是排序的代码 $("#bubble").click(function(){ for(var i=0; i<blocks.length; i++){

我尝试使用冒泡排序来排序这个数组

var blocks = ["50", "90", "70", "40", "190", "110", "300", "30", "60", "245"];
但是由于某种原因,当我在排序后打印出数组时,我只得到110190245,30300,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);

});

您正在排序字符串,而不是数字。通过词法值进行比较时,会比较第一个字符,如果它们相同,则会比较第二个字符,依此类推。在本例中,100小于20,因为1在2之前

如果要按项目的数值进行比较,请使用+运算符将其转换为数字:

+blocks[j] > +blocks[j + 1]
例如:

变量块=[50,90,70,40,190,110,300,30,60,245]; 对于var i=0;i.长度;i++{ 对于var j=0;j+块[j+1]{ var temp=块[j]; 块[j]=块[j+1]; 块[j+1]=温度; } } }
控制台。日志块 您正在排序字符串,而不是数字。通过词法值进行比较时,会比较第一个字符,如果它们相同,则会比较第二个字符,依此类推。在本例中,100小于20,因为1在2之前

如果要按项目的数值进行比较,请使用+运算符将其转换为数字:

+blocks[j] > +blocks[j + 1]
例如:

变量块=[50,90,70,40,190,110,300,30,60,245]; 对于var i=0;i.长度;i++{ 对于var j=0;j+块[j+1]{ var temp=块[j]; 块[j]=块[j+1]; 块[j+1]=温度; } } }
控制台。日志块 排序算法还可以。然而,您正在比较字符串值,这就是您得到意外结果的原因

但是,您可以使用+符号和映射函数将字符串转换为int:

blocks = blocks.map(b => +b);
然后将正确进行排序:

变量块=[50,90,70,40,190,110,300,30,60,245]; 常量bubbleSort=块=>{ blocks=blocks.mapb=>+b; 对于变量i=0;i块[j+1]{ var temp=块[j]; 块[j]=块[j+1]; 块[j+1]=温度; } } } 返回块; }
console.logbubbleSortblocks 排序算法还可以。然而,您正在比较字符串值,这就是您得到意外结果的原因

但是,您可以使用+符号和映射函数将字符串转换为int:

blocks = blocks.map(b => +b);
然后将正确进行排序:

变量块=[50,90,70,40,190,110,300,30,60,245]; 常量bubbleSort=块=>{ blocks=blocks.mapb=>+b; 对于变量i=0;i块[j+1]{ var temp=块[j]; 块[j]=块[j+1]; 块[j+1]=温度; } } } 返回块; }
console.logbubbleSortblocks;看起来排序正确。为什么您认为它只是数组的一部分?更改为var blocks=[50、90、70、40、190、110、300、30、60、245];-你得到了什么?你知道为什么不同吗?看起来分类正确。为什么您认为它只是数组的一部分?更改为var blocks=[50、90、70、40、190、110、300、30、60、245];-你得到了什么?你知道为什么不同吗?