php之排序-------冒泡排序的优化

本文需要在理解冒泡排序的基础之上

排序是算法入门的基础操作,冒泡排序很经典。
下面这个改进后的冒泡排序,使循环的次数大大的降低了(特殊的除外:最小的数字在最后面,和普通的冒泡排序的循环次数一致)。

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);
}
image.png

红框中的内容为改进后判断是否发生交换的标志。
当在本轮的循环中,没有发生数据的交换,则代表排序完成(不需要继续后面的循环)。

你可能感兴趣的:(php之排序-------冒泡排序的优化)