zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    c# 操作数据库
    dataview findrows
    C++:gethostname,gethostbyname获取IP地址和计算机名
    MQTT
    STM32操作外部SRAM
    JAVA中最常用的快捷键总结
    Zstack中End Device设备失去父节点时的重新入网处理方法(转)
    VC++ 重叠窗口
    (转载)PLC内部电路常见的几种形式
    VS2005 DoModal函数
  • 原文地址:https://www.cnblogs.com/cutcop/p/13213060.html
Copyright © 2011-2022 走看看