javascript"> var arr = [3, 4, 5, 2, 1];
for (var i = 1; i <= arr.length - 1;i++){
for(var j=0;j<=arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
1.进入第一次外循环,此时i=1,则内层循环条件为j<=3(此时数组为[3,4,5,2,1])
(进入第一次内循环)
①.当j=0时,判断arr[0]>arr[1],即判断3>4,不成立,跳出if
(进入第二次内循环)
②.当j=1时,判断arr[1]>arr[2],即判断4>5,不成立,跳出if
(进入第三次内循环)
③.当j=2时,判断arr[2]>arr[3],即判断5>2,成立,使用temp临时变量,将arr[2]和arr[3]的值互换,此时数组发生变化为[3,4,2,5,1]
(进入第四次内循环)
④.当j=3时,判断arr[3]>arr[4],即判断5>1,成立,使用temp临时变量,将arr[3]和arr[4]的值互换,此时数组发生变化为[3,4,2,1,5]
2.进入第二次外循环,此时i=2,则内循环条件为j<=2(此时数组为[3,4,2,1,5])
(进入第一次内循环)
①.当j=0时,判断arr[0]>arr[1],即判断3>4,不成立,跳出if
(进入第二次内循环)
②.当j=1时,判断arr[1]>arr[2],即判断4>2,成立,使用temp临时变量,将arr[1]和arr[2]的值互换,此时数组发生变化为[3,2,4,1,5]
(进入第三次内循环)
③.当j=2时,判断arr[2]>arr[3],即判断4>1,成立,使用temp临时变量,将arr[2]和arr[3]的值互换,此时数组发生变化为[3,2,1,4,5]
3.进入第三次外循环,此时i=3,则内循环条件为j<=1(此时数组为[3,2,1,4,5])
(进入第一次内循环)
①.当j=0时,判断arr[0]>arr[1],即判断3>2,成立,使用temp临时变量,将arr[0]和arr[1]的值互换,此时数组发生变化为[2,3,1,4,5]
(进入第二次内循环)
②.当j=1时,判断arr[1]>arr[2],即判断3>1,成立,使用temp临时变量,将arr[1]和arr[2]的值互换,此时数组发生变化为[2,1,3,4,5]
4.进入第四次外循环,此时i=4,则内循环条件为j<=1(此时数组为[2,1,3,4,5])
(进入第一次内循环,也只有一次内循环)
①.当j=0时,判断arr[0]>arr[1],即判断2>1,成立,使用temp临时变量,将arr[0]和arr[1]的值互换,此时数组发生变化为[1,2,3,4,5]
故最终将数组从小到大排序,反之从大到小排序是一个道理。(无论什么语言,算法结构基本是一样的)