Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 冒泡排序算法有一个缺陷,一些编号的列表不';无法在NodeJS中正确排序_Javascript_Node.js_Algorithm_Sorting - Fatal编程技术网

Javascript 冒泡排序算法有一个缺陷,一些编号的列表不';无法在NodeJS中正确排序

Javascript 冒泡排序算法有一个缺陷,一些编号的列表不';无法在NodeJS中正确排序,javascript,node.js,algorithm,sorting,Javascript,Node.js,Algorithm,Sorting,说到算法,我是新手,我从底层开始使用冒泡排序。我创建了我的实现,它似乎工作了9/10次,对1-100之间的数字列表进行排序 然而,很少有时候它没有正确排序,并且会有1个随机数没有完全排序 我不确定我的代码中的错误在哪里,我来stack overflow寻求帮助 algorithims.js const sortArr=[51,54,63,98,100,86,80,52,88,6,75,22,64,66,84,91,12,73,9,90,41,85,37,2,46,57,58,1,31,87,7

说到算法,我是新手,我从底层开始使用冒泡排序。我创建了我的实现,它似乎工作了9/10次,对1-100之间的数字列表进行排序

然而,很少有时候它没有正确排序,并且会有1个随机数没有完全排序

我不确定我的代码中的错误在哪里,我来stack overflow寻求帮助

algorithims.js

const sortArr=[51,54,63,98,100,86,80,52,88,6,75,22,64,66,84,91,12,73,9,90,41,85,37,2,46,57,58,1,31,87,78,93,82,55,47,20,43,21,70,50,53,15,19,39,11,30,83,7,77]
//此bubblesort算法对编号列表进行排序
让bubbleSort=(arr)=>{
设计数器=0
for(设i=0;i排序[i+1]){
计数器+=1
sortArr.拼接(i,0,sortArr[i+1])
排序拼接(i+2,1)
}
}
如果(计数器>1){
泡泡运动(索塔尔)
}否则{
console.log(sortArr)
}
};

泡泡糖(Sortar)它应该是
计数器>=1
而不是
计数器>1

因为对于像
3,5,3,3
这样的情况,交换一个元素会使它
3,3,5,3
,它将显示数组值,而不是进行另一个递归调用

但是,, 标准冒泡排序使用嵌套循环。如果所有内容都已排序,则可以中断外部循环(就像您对计数器变量所做的那样)

此外,使用好的旧temp变量可以更快地交换元素

temp = a;
a = b;
b = temp
还是那个酷的

a ^= b;
b ^= a;
a ^= b

抱歉,但这看起来不像标准的气泡排序。冒泡排序具有嵌套循环。这可能就是它“不总是”工作的原因。@crashmstr我以前从未见过它。我只是读了一下规则,然后试着从头开始创建它为什么
计数器>1
?为什么不
计数器>=1
?对于这样的情况,
3,5,3,3,
将是计数器=1和一次交换。这意味着
3,3,5,3
?它真的应该失败得更多。@AritraChakraborty我只是在运行一个没有任何重复数字的快速测试。谢谢你回答我的问题。工作起来很有魅力。@crashmstr它是bubble sortAritra的递归变体,请问为什么bubble排序使用嵌套循环是最佳选择?我理解递归是内存密集型的,它不是一个好的解决方案。奇怪的是,我对这一切都不熟悉。嵌套循环并不是每次迭代都使用调用堆栈。如果一次又一次地创建一个函数,它将创建所有的局部变量,一个调用堆栈来存储它们。对于可以通过递归或迭代解决的方法,由于内存占用,最好选择迭代。let bubblesSort2=(arr)=>{let counter=1 For(let i=0;i=1){counter=0}否则{break}For(let ii=0;ii=arr[ii+1]){let tmp=arr[ii]arr[ii]=arr[ii+1]arr[ii+1]=tmp计数器+=1}}}console.log(arr)}