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,无法进一步交换
答案 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次。