zoukankan      html  css  js  c++  java
  • php排序算法

    (一)冒泡排序

    /**
     * 冒泡排序:
     * 使用相邻的元素挨个比较一次 符合条件交换位置
     * @param $arr
     */
    function bubbleSort($arr)
    {
        $length = count($arr);
    
        for ($i = 0; $i < $length - 1; $i++) { //控制轮数 length个数只需要比较length-1轮
            //控制每一轮的比较:并选出一个最大数
            //索引值应该是从0开始 --->到每一轮的倒数第二个结束 与其对应的后面一个元素进行比较
            //每一轮选出一个最大值以后 下一轮就少掉一个值 :
            //第一轮i=0,少0个;  j<arr.length-1-0
            //第二轮i=1,少1个;  j<arr.length-1-1
            //第三轮i=2,少2个   j<arr.length-1-2
            for ($j = 0; $j < $length - 1 - $i; $j++) {
                if ($arr[$j] > $arr[$j + 1]) {
                    $temp        = $arr[$j];
                    $arr[$j]     = $arr[$j + 1];
                    $arr[$j + 1] = $temp;
                }
            }
        }
        return $arr;
    }

    (二)选择排序

    /*
    选择排序)
    使用一个元素与其他元素挨个比较一次 如果符合条件则交换位置
    */
    function selectSort($arr)
    {
        $length = count($arr);
        //使用每个元素与其后面的所有元素挨个比较一次 符合条件则交换位置
        for ($i = 0; $i < $length - 1; $i++) {//被比较的数 从第一个到倒数第二个
            for ($j = $i + 1; $j < $length; $j++) {//要比较的其他所有数 从被比较的数后面一个开始 一直到最后一个数
                if ($arr[$i] > $arr[$j]) {
                    $temp    = $arr[$i];
                    $arr[$i] = $arr[$j];
                    $arr[$j] = $temp;
                }
            }
        }
        return $arr;
    }

     (三)快速排序

    /**
     * 快速排序
     * 通过设置一个初始中间值,来将需要排序的数组分成3部分,小于中间值的左边,中间值,大于中间值的右边,
     * 继续递归用相同的方式来排序左边和右边,最后合并数组
     * @param $arr
     * @return array
     */
    function quickSort($arr)
    {
        // 如果个数为空或者1,则原样返回数组
        if (count($arr) <= 1) {
            return $arr;
        }
    
        $middle = $arr[0]; // 初始中间值
    
        $left  = array(); // 接收小于中间值
        $right = array();// 接收大于中间值
    
        // 循环比较
        for ($i = 1; $i < count($arr); $i++) {
    
            if ($arr[$i] > $middle) {
    
                // 大于中间值
                $right[] = $arr[$i];
            } else {
    
                // 小于或等于中间值
                $left[] = $arr[$i];
            }
        }
    
        // 递归排序划分好的2边
        $left  = quickSort($left);
        $right = quickSort($right);
    
        // 合并排序后的数据,别忘了合并中间值
        return array_merge($left, array($middle), $right);
    }
  • 相关阅读:
    fork()和vfork()的区别(转载)
    Linux中fork()函数详解(转载)
    ERROR:Simulator861-Failed to link the design解决办法
    ISE 14.7安装教程最新版(Win10安装)
    实验2用户及文件权限管理
    检验
    实验1基本概念及操作
    日常学习笔记(2)
    日常笔记1
    拷贝初始化的几种情况
  • 原文地址:https://www.cnblogs.com/jxl1996/p/10138888.html
Copyright © 2011-2022 走看看