关于冒泡排序算法优化

最普通的冒泡排序算法

function bubbleSort($arr){
	$size = count($arr)-1;
	for ($i = 0;$i <= $size ; $i++){
		for ($j = $size-1;$j >= $i;$j--){
			if ($arr[$j] > $arr[$j+1]){
				$tmp = $arr[$j];
				$arr[$j] = $arr[$j+1];
				$arr[$j+1] = $tmp;
			}
		}
	}
	return $arr;
}

复杂度为O(n^2),效率不高。

 

优化后的冒泡排序算法

function bubbleSort($arr){
	$size = count($arr)-1;
	$flag = true;
	for ($i = 0;$i <= $size && $flag; $i++){
		$flag = false;
		for ($j = $size-1;$j >= $i;$j--){
			if ($arr[$j] > $arr[$j+1]){
				$tmp = $arr[$j];
				$arr[$j] = $arr[$j+1];
				$arr[$j+1] = $tmp;
				$flag = true;
			}
		}
	}
	return $arr;
}

复杂度为O(n) - O(n^2)

优化前的冒泡排序算法如果大部分数据是有序的少部分数据无须比如

$arr = [2,1,3,4,0,5,7,8,6,9];

那当它外层进行4次遍历后已经是有序的了,可它不会停止遍历,依旧会向后遍历下去,这样就会反浪费计算资源。

而优化后的冒泡排序算法,设置一个标识,只有当内存循环遍历发生数据交换时,才会通知外层循环继续遍历,否则带便内循环未发生数据交换,这就说明数据已经按序排列完毕,通过标识给外层循环发信号,让外层循环停止遍历,这样优化后的冒泡排序算法就可以在适当的时机停止遍历,节约计算资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值