gpt4 book ai didi

javascript - 冒泡排序不交换 Javascript 中的数组元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:44:52 26 4
gpt4 key购买 nike

我正在创建一个简单的程序,它应该利用冒泡排序算法按升序对数字列表进行排序。

出于测试目的,我添加了 alert(unsortedNumbers); 这行,如果您运行它,您会看到,无论算法通过多少次,数字都不会改变顺序。

程序似乎陷入了无限循环,因为“Another pass”被反复打印到控制台。按照这一行 console.log("Another pass");

的指示

与冒泡排序算法一样,一旦它不必在某个遍中交换任何项,我们就知道这是排序列表,我创建了变量 swapped,但是它看起来像这始终是 1。我认为这可能是 swapArrayElements() 函数没有交换项造成的。

为什么函数不交换数组中项的索引?

(代码在 SO 的代码片段工具上似乎无法正常运行,可能需要复制到记事本文档中)

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();
}
<head>
</head>
<body onload="main()">
</body>

最佳答案

你的代码有错误:

if (ii = len) {

还有

if (swapped = 1){ 

应该是双等号

关于javascript - 冒泡排序不交换 Javascript 中的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29891470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com