将VisuAlgo气泡排序代码转换为Javascript
从我在这个网站上找到的排序算法开始(它真的很酷,它让你在算法运行时可视化…),我想把它们的代码[我不知道它是什么语言…]翻译成Javascript,并将其应用到要排序的数字数组中 在多次尝试之后,我仍然没有对其进行排序,并且我的代码没有提供排序后的数组将VisuAlgo气泡排序代码转换为Javascript,javascript,for-loop,if-statement,do-while,bubble-sort,Javascript,For Loop,If Statement,Do While,Bubble Sort,从我在这个网站上找到的排序算法开始(它真的很酷,它让你在算法运行时可视化…),我想把它们的代码[我不知道它是什么语言…]翻译成Javascript,并将其应用到要排序的数字数组中 在多次尝试之后,我仍然没有对其进行排序,并且我的代码没有提供排序后的数组 1) 有没有关于如何修复的建议 2) 我看到VisuAlgo代码在for循环中,在do while循环中使用if语句。。。这在Javascript中可能吗?对我来说,它看起来像是do中的if-else语句,而(参见我的实际代码)可以替换的 谢
- 1) 有没有关于如何修复的建议
- 2) 我看到VisuAlgo代码在
循环中,在for
循环中使用do while
语句。。。这在Javascript中可能吗?对我来说,它看起来像是if
do中的
语句,而if-else
(参见我的实际代码)可以替换
的
function swap(element1, element2) {
var t = element1;
element1 = element2;
element2 = t;
return [element1, element2];
};
var startArray = [2, 1, 0, 5, 1];
var swapped = true;
do {
for (i = 0; i < startArray.length; i++) {
if (startArray[i] > startArray[i+1]) {
swap(startArray[i], (startArray[i]+1));
console.log(startArray);
i++;
} else {
swapped = false;
}
}
}
while (swapped);
console.log(startArray);
功能交换(元素1、元素2){
var t=元素1;
元素1=元素2;
元素2=t;
返回[element1,element2];
};
var startArray=[2,1,0,5,1];
var交换=真;
做{
对于(i=0;i星光[i+1]){
交换(星光[i],(星光[i]+1));
控制台日志(startArray);
i++;
}否则{
交换=假;
}
}
}
while(交换);
控制台日志(startArray);
您的代码有几个问题
swap(startArray[i], (startArray[i]+1));
这显然是错误的。你可能是说
swap(startArray[i], startArray[i+1]);
但我不明白如何使用您的交换代码。您如何处理此函数返回的值
也许更好的代码是
[startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]));
你也可以用更紧凑的方式做同样的事情
startArray[i]=[startArray[i+1], startArray[i+1]= startArray[i]][0];
我还没有测试代码,但它应该可以工作
如果数组较大,则更喜欢插入排序而不是冒泡排序。它通常更快,易于实现。最终代码:
function swap(element1, element2) {
var t = element1;
element1 = element2;
element2 = t;
return [element1, element2];
};
var startArray = [2, 1, 9, 5, 1, 4,7, 457, 653, 43, 3];
var swapped = true;
do {
for (i = 0; i < startArray.length; i++) {
if (startArray[i] > startArray[i+1]) {
[startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]);
console.log(startArray);
i = 0;
} else {
swapped = false;
}
}
}
while (swapped);
console.log(startArray);
功能交换(元素1、元素2){
var t=元素1;
元素1=元素2;
元素2=t;
返回[element1,element2];
};
var startArray=[2,1,9,5,1,4,7457653,43,3];
var交换=真;
做{
对于(i=0;i星光[i+1]){
[startArray[i],startArray[i+1]]=swap(startArray[i],startArray[i+1]);
控制台日志(startArray);
i=0;
}否则{
交换=假;
}
}
}
while(交换);
控制台日志(startArray);
谢谢@Alain Merigot;添加了您提到的2个更改,结果有所改进,但仍然只有部分排序。我在for循环中去掉了I=1,并用I=0进行了修改,结果正常。我将最后的代码包含在下面,以供将来的读者阅读。
function swap(element1, element2) {
var t = element1;
element1 = element2;
element2 = t;
return [element1, element2];
};
var startArray = [2, 1, 9, 5, 1, 4,7, 457, 653, 43, 3];
var swapped = true;
do {
for (i = 0; i < startArray.length; i++) {
if (startArray[i] > startArray[i+1]) {
[startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]);
console.log(startArray);
i = 0;
} else {
swapped = false;
}
}
}
while (swapped);
console.log(startArray);