6.5.9 PHP中的冒泡(起泡)排序算法
起泡法排序
插入排序、选择排序、冒泡排序,时间复杂度相似,所以全学实际意义不大,在实际测试中,我对3000个数组元素进行,这三种排序算法都需要花费80秒左右,而快速排序只需要8秒(10倍)
用起泡法对6个数排序(由小到大)。
起泡法的思路是:
将相邻两个数比较,将小的调到前头。
若有6个数:9-8-5-4-2-0第一次将8和9对调,第二次将第2和第3个数(9和5)对调……如此共进行5次,得到8-5-4-2-0-9的顺序,可以看到:最大的数9已“沉底”,成为最下面一个数,而小的数“上升”。最小的数0已向上“浮起”一个位置。经第一趟(共5次)后,已得到最大的数。然后进行第二趟比较,对余下的前面5个数按上法进行比较,经过4次比较,得到次大的数8。
如此进行下去。可以推知,对6个数要比较5趟,才能使6个数按大小顺序排列。在第一趟中要进行两个数之间的比较共5次,在第二趟中比4次……第5趟比1次。
如何获取最大值和最小值?
例test.php
<?php
$arr = array(0,1,22,3,44,5,6,7,88,9);
//从大到小
function mysort(&$arr) {
$len = count($arr);
for($i=0; $i<$len-1; $i++) {
for($j = 0; $j < $len-$i-1; $j++) {
if($arr[$j] > $arr[$j+1]) {
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
}
}
mysort($arr);
print_r($arr);