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控制台。日志块 您正在排序字符串,而不是数字。通过词法值进行比较时,会比较第一个字符,如果它们相同,则会比较第二个字符,依此类推。在本例中,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控制台。日志块 排序算法还可以。然而,您正在比较字符串值,这就是您得到意外结果的原因 但是,您可以使用+符号和映射函数将字符串转换为int:
blocks = blocks.map(b => +b);
然后将正确进行排序:
变量块=[50,90,70,40,190,110,300,30,60,245];
常量bubbleSort=块=>{
blocks=blocks.mapb=>+b;
对于变量i=0;iconsole.logbubbleSortblocks 排序算法还可以。然而,您正在比较字符串值,这就是您得到意外结果的原因 但是,您可以使用+符号和映射函数将字符串转换为int:
blocks = blocks.map(b => +b);
然后将正确进行排序:
变量块=[50,90,70,40,190,110,300,30,60,245];
常量bubbleSort=块=>{
blocks=blocks.mapb=>+b;
对于变量i=0;iconsole.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];-你得到了什么?你知道为什么不同吗?