冒泡排序效率比较低,进行的三种算法改进。
三种改进的冒泡排序,一次递增的改进。把前端和后端已经顺序对的数据直接忽略。
第一种方式:按照原先的冒泡排序来说,如果其中有一次循环没有进行值的交换,那么就已经排序完毕了。
<!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>