最普通的冒泡排序算法
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次遍历后已经是有序的了,可它不会停止遍历,依旧会向后遍历下去,这样就会反浪费计算资源。
而优化后的冒泡排序算法,设置一个标识,只有当内存循环遍历发生数据交换时,才会通知外层循环继续遍历,否则带便内循环未发生数据交换,这就说明数据已经按序排列完毕,通过标识给外层循环发信号,让外层循环停止遍历,这样优化后的冒泡排序算法就可以在适当的时机停止遍历,节约计算资源。