排序算法之冒泡排序

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。

 

思路:

1、如果元素大小关系不正确,交换这两个数(在本例中为a> b)

2、比较一对相邻元素(a,b)

3、重复步骤1和2,直到我们到达数组的末尾(最后一对是第(N-2)和(N-1)项,因为我们的数组从零开始)

4、到目前为止,最大的元素将在最后的位置。 然后我们将N减少1,并重复步骤1,直到N = 1。

<?php
$arr = array(20,10,35,42,9);
$len = count($arr);
for($i=0;$i<$len;$i++){
    for($j=0;$j<$len-1-$i;$j++){
		if($arr[$j+1] <$arr[$j]){
		    $tmp = $arr[$j+1];
			$arr[$j+1] = $arr[$j];
			$arr[$j] = $tmp;
		}
	}
}
print_r($arr);
?>

优化:假如某次排序后已经有序,我们需要减少排序的次数。

<?php
$arr = array(20,10,35,42,76);
$len = count($arr);
for($i=0;$i<$len;$i++){
	$exchange = false; //判断该次是否有位置交换
    for($j=0;$j<$len-1-$i;$j++){
		if($arr[$j+1] <$arr[$j]){
		    $tmp = $arr[$j+1];
			$arr[$j+1] = $arr[$j];
			$arr[$j] = $tmp;
			$exchange = true; 
		}
	}
	if(!$exchange) break;
}
print_r($arr);
?>

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值