冒泡排序

今天学的主要是冒泡排序中用的开闭原则不太懂,这是我的冒泡排序代码(后两个是对第一个的优化):

1、冒泡排序的简单实现

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>

<script>

var arr = [3,2,4,6,8,1];
//步骤:
//1、利用双重for循环
//2、外循环控制轮数,内循环控制行数。轮数和次数都是元素个数-1
//满足某一标准就前后交换位置

//1、利用双重for循环
//2、外循环控制轮数,内循环控制行数。轮数和次数都是元素个数-1
for(var i=0;i<arr.length-1;i++){
for(var j=0;j<arr.length-1;j++){
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);

</script>

</body>
</html>

2、冒泡排序升级版--次数优化

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>

<script>

//需求:冒泡排序(升序降序);
//思路:利用双重for循环。外循环控制轮数,内循环控制次数。轮数和次数都是元素个数-1; 满足某一标准就前后交换位置。
var arr = [3,2,4,6,8,1];
//打印轮数和次数
var m=0;//控制 轮数
var n=0;//控制 次数(优化:每比较一轮,可以少比较一次)
//2.外循环控制轮数,内循环控制次数。轮数和次数都是元素个数-1;
for(var i=0;i<arr.length;i++){
//j的次数可以减少几次。 (每比较一轮,可以少比较一次)
//i: 第一轮为0;第二轮为1;第三轮为2;第四轮为3.....
for(var j=0;j<arr.length-1-i;j++){
//3.满足某一标准就前后交换位置。
if(arr[j] > arr[j+1]){
var temp =arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
//每比较一次,n自增1
n++;
}
//比较一轮,m自增1
m++;
}
console.log(arr);
console.log(m);
console.log(n);


</script>

</body>
</html>

3、冒泡排序旗舰版--轮数优化

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>

<script>

//需求:冒泡排序(升序降序);
//思路:利用双重for循环。外循环控制轮数,内循环控制次数。轮数和次数都是元素个数-1; 满足某一标准就前后交换位置。

var arr = [3,2,4,6,8,1];
//打印轮数和次数
var m = 0;//控制 轮数(优化:只要能够断定已经排序完毕,就没有必要再执行下一轮了)
var n = 0;//控制 次数

//2.外循环控制轮数,内循环控制次数。轮数和次数都是元素个数-1;
for(var i=0;i<arr.length-1;i++){
//开闭原则:
var bool = true;//默认一个值是true。 默认本轮比较已经全部完成。
//j的次数可以减少几次。 (每比较一轮,可以少比较一次)
//i: 第一轮为0;第二轮为1;第三轮为2;第四轮为3.....
for(var j=0;j<arr.length-1-i;j++){
//3.满足某一标准就前后交换位置。
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
//如何断定,这一轮的比较已经完成排序。
//(整轮比较过程中没有任何一对元素前后交换位置);

//反向推断:如果交换位置了,就说明还没有完成排序(如果没有排序完毕就不能跳出循环)
bool = false;
}
//每比较一次,n自增1;
n++;
}
//比较一轮,m自增1
m++;
//判断:如果bool被修改了,说明没有排序完毕。如果一次都没有修改,就说明完成排序了。
if(bool){
break;
}
}
console.log(arr);
console.log(m);
console.log(n);


</script>

</body>
</html>
原文地址:https://www.cnblogs.com/sxd0425/p/6557503.html