繁体   English   中英

外循环第一次迭代后停止执行

[英]Execution stops after the first iteration of the outter loop

var array = [5,3,4,1]

for(var x = 0; x < array.length; x++){

    for(var y = array.length - 1; y >= x; y--){

        if(array[x] > array[y]){
          var temp = array[y];
          array[y] = array[x];
          array[x] = temp; 
    }
  }
}
console.log(array); 

//Output : [1,3,4,5]

我知道循环是为了交换循环本质上是在 x 大于 y 时交换两个值。

[1,3,4,5]是 x = 0 时的结果,但为什么一旦 x = 1 就没有任何变化,依此类推? 次要 for 循环不应该通过它的迭代运行并继续交换值直到第一个循环达到array.length (4) 吗?

编辑:关于我的思考过程在哪里的更多信息:第一次迭代后输出为 [1,3,4,5],但是当它迭代到 x = 1 时呢? 那时,x[1] = 3,对吗? 当 y 从 5 递减到 4 到 3,但 3 > 1 时,if 语句失败,因此我认为输出更改为 [3,1,4,5]。 此时 x 迭代到 x[2],即 4,输出变为 [4,3,1,5],最后,x[3] = 5,其中不能再进行交换

不明白你说的过程停止是什么意思。 以下是您的代码的修改版本

var array = [5,3,4,1]
var count = 0, swap = 0;
for(var x = 0; x < array.length; x++){
    for(var y = array.length - 1; y >= x; y--){
        count++;
        if(array[x] > array[y]){
          swap++;
          var temp = array[y];
          array[y] = array[x];
          array[x] = temp; 
    }
  }
}
console.log('count', count, 'swap', swap,'array',array); 

计数 10 交换 1 个数组 [1, 3, 4, 5]

代码是一个简单的从最小到最大的交换排序算法。 第一次交换后,数组完全排序,因此没有进一步的交换发生。 该循环确实运行了 10 次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM