• PHP 常见4种排序 冒泡排序、选择排序、插入排序、快速排序


    PHP 常见4种排序 冒泡排序、选择排序、插入排序、快速排序

    1、冒泡排序

    原理:对一组数据,比较相邻数的大小,将值大的放到后面。

    <?php
    // 冒泡排序
    function bubbleOrder($arr)
    {
        $count = count($arr);
        $temp = 0;
        // 外层控制排序次数
        for ($i = 0; $i < $count - 1; $i++) {
            // 内层控制每轮比较次数
            for ($j = 0; $j < $count - 1 - $i; $j++) {
                if ($arr[$j] > $arr[$j + 1]) {
                    $temp = $arr[$j];
                    $arr[$j] = $arr[$j + 1];
                    $arr[$j + 1] = $temp;
                }   // print_r($arr);  echo "<br>";
            }
        }
        return $arr;
    }
    
    $arr = array(5, 2, 7, 6, 9, 3);
    $res = bubbleOrder($arr);
    var_dump($res);

    2、选择排序

    原理:在一组数据中,选出最小的数与第一个位置交换,
    然后在剩下的数据中在找出最小的数和第二个位置交换
    然后在剩下的数据中在找出最小的数和第三个位置交换
    依次类推直到倒数第二个数和最后一个数对比

    <?php
    // 选择排序
    function selcetOrder($arr)
    {
        // 定义中间变量
        $temp = 0;
        $count = count($arr);
        for ($i = 0; $i < $count - 1; $i++) {
            //定义最小位置
            $minIndex = $i;
            for ($j = $i + 1; $j < $count; $j++) {
                if ($arr[$j] < $arr[$minIndex]) {
                    $minIndex = $j;
                }
            }
    
            if ($i != $minIndex) {
                $temp = $arr[$i];
                $arr[$i] = $arr[$minIndex];
                $arr[$minIndex] = $temp;
            }
        }
        return $arr;
    }
    
    $arr = array(5, 2, 7, 6, 9, 3);
    $res = selcetOrder($arr);
    var_dump($res);

    3、插入排序

    原理: 将需要排序的书,与前面已经排好的数据从后往前进行比较,使其插入到相应的位置;

    <?php
    // 插入排序
    function insertOrder($arr)
    {
        $len = count($arr);
        //控制总循环次数
        for ($i = 0; $i < $len; $i++) {
            $temp = $arr[$i];
            for ($j = $i - 1; $j >= 0; $j--) {
                //从当前位置从后往前进行对比
                if ($temp < $arr[$j]) {
                    $arr[$j + 1] = $arr[$j];
                    $arr[$j] = $temp;
                }else{
                    break;
                }
            }
        }
        return $arr;
    }
    $arr = array(5, 2, 7, 6, 9, 3);
    $res = insertOrder($arr);
    var_dump($res);

    4、快速排序

    原理:初始一个中间值(一般选择第一个),将需要排序的数组分成3部分,小于中间的值放左边、中间值、大于中间值的放右边,继续用递归用相同的方式来排序左边和右边,最后合并数组

    <?php
    // 快速排序
    function quickOrder($arr)
    {
        // 判断是否需要运行,下面要拿出一个中间值
        if (count($arr)<=1) {
            return $arr;
        }
        $middle = $arr[0]; // 中间值
        $left   = array();
        $right  = array();
        for ($i = 1; $i < count($arr); $i++) {
            if ($middle < $arr[$i]) {
                $right[] = $arr[$i];
            } else {
                $left[] = $arr[$i];
            }
        }
        // 递归排序划分好的2边数组
        $left = quickOrder($left);
        $right = quickOrder($right);
        return array_merge($left, array($middle), $right);
    }
    $arr = array(5, 2, 7, 6, 9, 3);
    $res = quickOrder($arr);
    var_dump($res)
    ;
  • 相关阅读:
    webbrowser在vb中叫
    linux小记之安装bin或deb程序
    9011,9012,9013,9014,8050,8550三极管的区别
    中兴v880刷机全过程。原创亲测
    Slackware的启动(init)过程
    sysvinit
    rc.S 分析【转自CSDN 】
    linux 解压rar zip
    slackware启动脚本详解
    工作
  • 原文地址:https://www.cnblogs.com/dafei4/p/12939127.html
Copyright © 2020-2023  润新知