冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。
思路:
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);
?>