冒泡排序的基本思想是对所有相邻记录的关键字值每一轮进行比效,如果(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>

js冒泡排序及优化

优化后的冒泡排序
在第一层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>

js冒泡排序及优化

相关文章:

  • 2022-12-23
  • 2022-01-19
  • 2021-11-11
  • 2020-05-20
  • 2021-12-15
猜你喜欢
  • 2022-01-20
  • 2022-12-23
  • 2021-07-18
  • 2021-11-18
相关资源
相似解决方案