常用排序算法之一:三种常用的冒泡排序的改进算法。
2016-04-27 17:53
141 查看
冒泡排序效率比较低,进行的三种算法改进。
三种改进的冒泡排序,一次递增的改进。把前端和后端已经顺序对的数据直接忽略。
第一种方式:按照原先的冒泡排序来说,如果其中有一次循环没有进行值的交换,那么就已经排序完毕了。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>冒泡排序改进方案1</title>
</head>
<body>
</body>
<script type="text/javascript">
var arr = [21,43,432,987,98,432,433,37,83];
var flag = true; // 设置的标志,用来标志本次循环是否有值交换
while(flag){
flag = false;
for(var i=0;i<arr.length-1;i++){
if(arr[i]<arr[i+1]){
var temp = arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
flag = true;
}
}
}
alert(arr);
</script>
</html>
第二中方式:用flag记录后面数据中最后一次交换值得位置。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
var arr = [21,43,432,987,98,432,433,37,83];
var flag = arr.length;; // 设置标志位,用来记录最后一次交换值的下标。如果下标不等于arr。length-1那就不用比较之后的数据了
var k ;
while(flag){
k = flag;
flag = 0;
for(var i=0;i<k-1;i++){
if(arr[i]<arr[i+1]){
var temp = arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
flag=i;
}
}
}
alert(arr);
</script>
</html>
第三种方式:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
var arr = [21,43,432,987,98,432,433,37,83];
var flag = arr.length; // 设置标志位,用来记录最后一次交换值的下标。如果下标不等于arr。length-1那就不用比较之后的数据了
var flagPre = 0; // 设置标志位,用来记录第一次交换值的下标,其中用flagF来表示是不是第一次交换值。
var flagF =true;
var k ;
while(flag){
k = flag;
flag = 0;
for(var i=flagPre;i<k-1;i++){
if(arr[i]<arr[i+1]){
var temp = arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
flag=i;
if(flagF==true){
flagPre=i;
flagF=false;
}
}
}
}
alert(arr);
</script>
</html>
三种改进的冒泡排序,一次递增的改进。把前端和后端已经顺序对的数据直接忽略。
第一种方式:按照原先的冒泡排序来说,如果其中有一次循环没有进行值的交换,那么就已经排序完毕了。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>冒泡排序改进方案1</title>
</head>
<body>
</body>
<script type="text/javascript">
var arr = [21,43,432,987,98,432,433,37,83];
var flag = true; // 设置的标志,用来标志本次循环是否有值交换
while(flag){
flag = false;
for(var i=0;i<arr.length-1;i++){
if(arr[i]<arr[i+1]){
var temp = arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
flag = true;
}
}
}
alert(arr);
</script>
</html>
第二中方式:用flag记录后面数据中最后一次交换值得位置。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
var arr = [21,43,432,987,98,432,433,37,83];
var flag = arr.length;; // 设置标志位,用来记录最后一次交换值的下标。如果下标不等于arr。length-1那就不用比较之后的数据了
var k ;
while(flag){
k = flag;
flag = 0;
for(var i=0;i<k-1;i++){
if(arr[i]<arr[i+1]){
var temp = arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
flag=i;
}
}
}
alert(arr);
</script>
</html>
第三种方式:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
var arr = [21,43,432,987,98,432,433,37,83];
var flag = arr.length; // 设置标志位,用来记录最后一次交换值的下标。如果下标不等于arr。length-1那就不用比较之后的数据了
var flagPre = 0; // 设置标志位,用来记录第一次交换值的下标,其中用flagF来表示是不是第一次交换值。
var flagF =true;
var k ;
while(flag){
k = flag;
flag = 0;
for(var i=flagPre;i<k-1;i++){
if(arr[i]<arr[i+1]){
var temp = arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
flag=i;
if(flagF==true){
flagPre=i;
flagF=false;
}
}
}
}
alert(arr);
</script>
</html>
相关文章推荐
- 5.怎么以域名的形式来浏览网站(内网 + 外网)?
- node学习笔记(1)--简介及安装Node.js开发环境
- 在windows上自动备份SVN版本库及定时删除
- oracle函数sign
- 文章标题
- redis集群安装提高
- android里面quadTo的实例(不是很酷炫)
- JVM和DVM
- elasticsearch.yml基本配置说明
- yum 源中的参数的解析
- SparseArray替代HashMap来提高性能
- 算术操作符总结
- 分享一个用DHTML写的一个js简易轮播图
- 商城开发方案书
- elasticsearch.yml基本配置说明
- 在SDK中打开其他接入应用的解决方案
- Hadoop1.x HDFS系统架构
- A tutorial that will show you how to build an instant messaging app with Sinch.
- Swift数据类型之整型和浮点型-备
- C++中const的用法