JavaScript冒泡排序修改(循环`i`在排序结束前停止。)

时间:2017-07-03 02:27:03

标签: javascript sorting bubble-sort

我需要在完成排序时立即停止循环i。 它不适用于数组的所有可能值。在某些情况下,排序不会发生。循环i在排序结束前停止。

pen link

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;
    }
  }
};

4 个答案:

答案 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);
};