Title:PHP冒泡排序算法Create:2018-05-24 ◊ :829

:2018-05-25 01:34
: TabKey9  :0  :0  


面试官说我根本不会冒泡排序,我非常羞愧当时把选择排序说成了冒泡排序!现在不会搞混了,以下是正确的冒泡排序算法、过程、效果展示。


function maopao($arr){
        // 冒泡排序算法
        // 第一层for循环,控制趟数,每一趟的目的将确定一个最大值,并把它放在当前趟数所对应的数组下标的位置
        for ($i=0; $i < count($arr)-1; $i++) {

echo "<hr>第 ",$i+1," 趟,假设当前最大值是元素",$i+1,"<hr>";// 用于追踪脚本执行过程

            // 第二层,依次两两比较,找出最大值
            for ($j=$i+1; $j < count($arr); $j++) {

echo "与第 ",$j+1," 个元素进行比较<br>";// 用于追踪脚本执行过程

                // 假设$arr[$i]就是最大值,如果不是最大值,
                if ($arr[$i] < $arr[$j]) {
                    // 则采用临时变量 index 进行交换值,
                    $index = $arr[$i];
                    $arr[$i] = $arr[$j];
                    $arr[$j] = $index;
                }
                // 然后再以当前最大值继续比较剩下的值
            }
            // 当前趟数比较结束,也确定了一个最大值,$i++进行下一趟的比较
        }
        // 所有趟数比较完毕!此时数组内所有的元素已经按照降序排列!
        return $arr;
}

// 临时数组
$arr1 = array(6,5,8,4,2,1,7,3);

// 调用冒泡排序方法
echo "冒泡排序的过程和效果<pre>";
print_r(maopao($arr1));

echo "冒泡排序小总结:冒泡排序是一种较简单的排序算法,通过循环控制,重复比较数组元素,并纠正排序错误的元素。用冒泡排序,每一趟都能找出当前最大值,如果有8个数组元素,只需要7趟,也就是数组总元素-1,因为第八趟是没有必要的,已经没有数组元素与它比较了!具体的排序过程详见代码注释";