zoukankan      html  css  js  c++  java
  • 浅析冒泡算法

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

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

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

    $arr = [1, 2, 4, 1, 23, 22, 12, 54, 65, 23];
    function maopao($arr)
    {
        $len = count($arr);
    
        // 该层循环控制 需要冒泡的轮数
        for ($i = 1; $i < $len; $i++) {
    
            // 该层循环用来控制每轮冒出一个数 需要比较的次数
            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;
                }
            }
        }
        return $arr;
    }

    「递归」:原理其实和双增for循环一致

    /**
     * @param $arr 传入要排序的数组
     * @param int $index 循环次数
     * @return mixed
     */
    function maopao1($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 maopao1($arr, $index);
    }


    //array(10) {
    // [0]=>
    // int(1)
    // [1]=>
    // int(1)
    // [2]=>
    // int(2)
    // [3]=>
    // int(4)
    // [4]=>
    // int(12)
    // [5]=>
    // int(22)
    // [6]=>
    // int(23)
    // [7]=>
    // int(23)
    // [8]=>
    // int(54)
    // [9]=>
    // int(65)
    //}
     
  • 相关阅读:
    拆分跨天的时间数据
    模板
    更换数据库服务器迁移步骤
    缺失索引
    flex布局解说和属性
    Vuejs中关于computed、methods、watch,mounted的区别
    皮囊
    回家
    江苏旅游计划
    重写原生alert,弹出层过一会就消失
  • 原文地址:https://www.cnblogs.com/houdabao/p/8516131.html
Copyright © 2011-2022 走看看