js冒泡排序及优化

冒泡排序的基本思想是对所有相邻记录的关键字值每一轮进行比效,如果(a[j]>a[j+1]),则将其交换,最终达到有序化。
它是稳定的排序

最坏情况:
**时间复杂度为O(n^2)**是把顺序的排列变成逆序,或者把逆序的数列变成顺序。在这种情况下,每一次比较都需要进行交换运算。

最好情况:
时间复杂度为O[n]。也就是排列前,表本身就是顺序的,则根据改进后 的方法需要进行n-1次比较,没有数据交换。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	<script type="text/javascript">
function maopaoSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {   // 相邻元素两两对比
        let temp = arr[j + 1];     // 元素交换
        arr[j + 1] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}
let arr=[2,5,7,3,9,4];
console.log(arr);
console.log(maopaoSort(arr));

</script>
</head>
<body>
</body>
</html>

在这里插入图片描述

优化后的冒泡排序
在第一层for循环加入初始化一个exchange交换标志为false,当有交换发生时,则变为true,在第二层for循环结束后加入一个判断,如果为false,即从前往后对比没有交换,证明已经大小顺序正确,即可break来跳出外层for循环。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	<script type="text/javascript">
//需要排序的数组
var arr = Array(23, 45, 18, 37, 92, 13, 24);
var exchange;//交换标志    
for (var i = 0; i <arr.length - 1;i ++) {  //最多做n-1趟排序
  exchange = false;
  for (var j = arr.length - 1; j> i; j--) {
    if (arr[j] <arr[j - 1]) {
      exchange = true;
     var tmp = arr[j - 1];
      arr[j - 1] = arr[j];
      arr[j] = tmp;
    }
  }
  //若本趟排序未发生交换,提前终止算法
  if (!exchange) {
    break;
  }
}
alert('数组排序后为:' + arr + ',n共排了' + i+ '趟');
</script>
</head>
<body>
</body>
</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值