本文需要在理解冒泡排序的基础之上
排序是算法入门的基础操作,冒泡排序很经典。
下面这个改进后的冒泡排序,使循环的次数大大的降低了(特殊的除外:最小的数字在最后面,和普通的冒泡排序的循环次数一致)。
public function nowPrint($arr)
{
$len = count($arr);
for ($i = 1; $i < $len; $i++) {
$flag = false;
for ($k = 0; $k < $len - $i; $k++) {
if ($arr[$k] > $arr[$k + 1]) {
$tmp = $arr[$k + 1];
$arr[$k + 1] = $arr[$k];
$arr[$k] = $tmp;
$flag = true;
}
}
if(!$flag)
{
return array($arr, $i);
}
}
return array($arr, $i);
}
红框中的内容为改进后判断是否发生交换的标志。
当在本轮的循环中,没有发生数据的交换,则代表排序完成(不需要继续后面的循环)。