在外部循环的第一次迭代之后执行停止

时间:2016-04-25 03:13:06

标签: javascript arrays for-loop scope iteration

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语句失败。 1,所以我认为输出改为[3,1,4,5]。此时x迭代到x [2],即4,输出变为[4,3,1,5],最后,x [3] = 5,无法进一步交换

1 个答案:

答案 0 :(得分:-1)

不要理解过程停止的含义。以下是代码的修改版本

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次。