冒泡排序法,从小到大排序
var arr=[8,1,5,3,7];
console.log("操作前原数组:",arr);
for(var j=0;j<arr.length-1;j++){
var boo=true;
for(var i=0;i<arr.length-1-j;i++){
if(arr[i+1]){
boo=false;
var temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
console.log("第"+j+"轮"+"第"+i+"次");
}
console.log("本次交换完数组:",arr);
if(boo){
//如果本轮完事,没有执行if语句,表示前面没有比后面小的,也就是前面比后面大,那么就是有顺序的了,可停止循环。
break;
}
}
console.log("操作后的原数组",arr);
控制台打印内容,如下
操作前原数组: (5) [8, 1, 5, 3, 7]
第0轮第0次
第0轮第1次
第0轮第2次
第0轮第3次
本次交换完数组: (5) [1, 5, 3, 7, 8]
第1轮第0次
第1轮第1次
第1轮第2次
本次交换完数组: (5) [5, 3, 7, 1, 8]
第2轮第0次
第2轮第1次
本次交换完数组: (5) [3, 7, 5, 1, 8]
第3轮第0次
本次交换完数组: (5) [7, 3, 5, 1, 8]
操作后的原数组 (5) [7, 3, 5, 1, 8]
冒泡排序法四次优化
- 内层for循环:变量<.length-1;
原因:最后一个数,不能和后面比较,所以最大索引是倒数第二个索引。 - 外层for循环:变量<.length-1;
原因:n个数,冒泡(n-1)次就会出现顺序。 - 内层for循环:变量<.length-1-外层for循环变量;
原因:每轮冒泡结束后,就会诞生一个最下值,下一轮可少比较一次。 - 开闭原则:排出顺序立即停止。
开闭原则:在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。