冒泡排序仅对数组的一部分进行排序
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
,因为1
在2
之前。
如果您想按数值比较项目,请使用 +
运算符将它们转换为数字:
+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));
【讨论】:
以上是关于冒泡排序仅对数组的一部分进行排序的主要内容,如果未能解决你的问题,请参考以下文章