我正在创建一个简单的程序,该程序应该使用冒泡排序算法按升序对数字列表进行排序。
出于测试目的,我已经添加了行alert(unsortedNumbers);
,您可以看到如果运行它,无论算法通过多少次,数字都不会改变顺序。
程序似乎陷入无限循环,因为'另一个传递'反复打印到控制台。按照此行console.log("Another pass");
与冒泡排序算法一样,一旦它不必在某个传递上交换任何术语,我们就知道这是排序列表,我已经创建了变量swapped
,但它看起来总是如此 1 。我认为这可能是由swapArrayElements()
函数没有交换条款引起的。
为什么函数没有交换数组中术语的索引?
(代码似乎无法在SO&#39的代码段工具上正常运行,可能必须复制到记事本文档中)
function main(){
var unsortedNumbers =[7,8,13,1,6,9,43,80]; //Declares unsorted numbers array
alert(unsortedNumbers);
var swapped = 0;
var len = unsortedNumbers.length;
function swapArrayElements(index_a, index_b) { //swaps swapArrayElements[i] with swapArrayElements[ii]
var temp = unsortedNumbers[index_a];
unsortedNumbers[index_a] = unsortedNumbers[index_b];
unsortedNumbers[index_b] = temp;
}
function finish(){
alert(unsortedNumbers);
}
function mainBody(){
for(var i =0;i<len;i++){
var ii =(i+1);
if (unsortedNumbers[i]>unsortedNumbers[ii]){
console.log("Swap elements");
swapArrayElements(i,ii);
swapped=1; // Variable 'swapped' used to check whether or not a swap has been made in each pass
}
if (ii = len){
if (swapped = 1){ // if a swap has been made, runs the main body again
console.log("Another pass");
alert(unsortedNumbers); //Added for debugging
swapped=0;
mainBody();
}else{
console.log("Finish");
finish();
}
}
}
}
mainBody();
}
&#13;
<head>
</head>
<body onload="main()">
</body>
&#13;
答案 0 :(得分:2)
您的代码中有错误:
if (ii = len) {
以及
if (swapped = 1){
它应该是双重等于
答案 1 :(得分:1)
无效的条件检查导致无限循环:
if (ii = len)
&amp; if (swapped = 1)
应该有==
或===
运营商。这导致了无限循环。
注意:根据避免全局变量的最佳做法,您的代码不合适。你不应该使用全局变量并尝试 传递变量并在处理后将它们返回。
请参阅this以避免全局变量。