PHP 之冒泡算法

冒泡排序属于交换排序,是一种稳定排序

原理:冒泡算法是将较小的元素搬移到数组的开始,将较大的元素慢慢地往数组的尾部移动,小的数据就像气泡一下往上冒,而大的数据就像石头一样往下沉。

总结两个方法,分别是「递归」、「双层for循环」实现:  

「双层for循环」:

  for()方法内传入一个数组,对数组进行循环 n-1 次,并判断,两两比较,前值是否大于后值,如果是则交换。依次再次进行循环数组 n-1 次,最后返回有序的数组。

$array = [1, 3, 5, 18, 9, 2, 4, 6, 5, 0, 10, 29, 15];
//冒泡算法
function mao_pao($array)
{
    //判断参数是否是一个数组
    if (!is_array($array)) return false;

    $len = count($array);

    if ($len <= 1) return $array;

    // 该层循环控制 需要冒泡的轮数
    for ($i = 1; $i < $len; $i++) {

        // 该层循环用来控制每轮冒出一个数 需要比较的次数
        for ($k = 0; $k < $len - $i; $k++) {
            if ($array[$k] > $array[$k + 1]) {
                $tmp = $array[$k + 1]; // 声明一个临时变量
                $array[$k + 1] = $array[$k];
                $array[$k] = $tmp;
            }
        }
    }
    return $array;
}

「递归」:

  原理其实和双增for循环一致

/**
 * @param $arr 传入要排序的数组
 * @param int $index 循环次数
 * @return mixed
 */

$arr = [1, 3, 5, 18, 9, 2, 4, 6, 5, 0, 10, 29, 15];

function mao_pao($arr, $index = 0)
{
    $len = count($arr);

    if ($len < $index) {
        return $arr;
    }

    for ($i = $index; $i < ($len - 1); $i++) {
        if ($arr[$i] > $arr[$i + 1]) {
            $tmp = $arr[$i + 1];
            $arr[$i] = $tmp;
            $arr[$i + 1] = $arr[$i];
        }
    }

    $index++;

    return mao_pao($arr, $index);
}

 

posted on 2020-06-30 12:36  小识堂  阅读(614)  评论(0编辑  收藏  举报

导航