我需要在完成排序时立即停止循环i
。
它不适用于数组的所有可能值。在某些情况下,排序不会发生。循环i
在排序结束前停止。
var arr = [11, 12, 0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 13];
var n = arr.length;
var t;
var swap = true;
for (var i = 0; (i < n) && (swap === true); i++) {
for (var j = 0; j < (n - (i + 1)); j++) {
if (arr[j] > arr[j + 1]) {
t = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = t;
swap = true;
} else {
swap = false;
}
}
};
答案 0 :(得分:0)
var swap = true;
for (var i = 0; (i < n) && (swap === true); ++i) {
swap = false;
for (var j = 0; j < ( n - (i + 1) ); ++j) {
if ( arr[j] > arr[j + 1] ) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swap = true;
}
}
}
一旦loopi没有交换任何号码,&#34;交换&#34;将是假的,然后我们可以退出循环。
答案 1 :(得分:0)
循环不知道数组何时排序,因此您无法知道何时停止i
循环。
如果您希望冒泡排序起作用,您应该取出swap
变量逻辑。
var arr = [11, 12, 0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 13];
var n = arr.length;
var t;
var swap = true;
for (var i = 0; i < n; i++) {
for (var j = 0; j < n; j++) {
if (arr[j] > arr[j + 1]) {
t = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = t;
}
}
};
但是,实现冒泡排序的更好方法是this。
答案 2 :(得分:0)
如果你想提前破坏外部循环,你可以在Javascript中使用标签来实现这一点。
outer:
for (var i = 0; i < n; i++) {
inner:
for (var j = 0; j < (n - (i + 1)); j++) {
if (arr[j] > arr[j + 1]) {
t = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = t;
} else {
break outer;
}
}
};
MDN Doc for label确实表明这些非常罕见,但它们的设计正是为了这个目的。
请注意,我没有查看您的冒泡算法的准确性或其他方面 - 如果您遇到问题,那么Junaid Ahmed的答案可能会对您有所帮助。
答案 3 :(得分:0)
Yibin Qiu had answered for my question
他的答案是最准确的,他帮助我理解我的代码应该如何使我的想法发挥作用在这个例子中。
var arr = [11, 12, 0, 1, 2, 4, 3, 5, 7, 6, 8, 9, 10, 13];
var n = arr.length, t, swap = true;
for (var i = 0; (i < n) && (swap === true); ++i) {
swap = false;
for (var j = 0; j < ( n - (i + 1) ); ++j) {
if ( arr[j] > arr[j + 1] ) {
t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
swap = true;
}
console.log('swap = ' + swap);
}
console.log('j = ' + j);
console.log('i = ' + i);
};