快速排序,php实现

思路:1.选择第一个元素作为分区的基准元素,比较其他元素和该基准函数的大小,小的放在左边数组,大的放在右边数组

  •  2.分别对上述左右数组重复步骤1
    
  •  3.直到数组的元素为一个或者空
    
  •  4.合并左分区,分区基准元素,右分区
    
<?php
/**
 * Created by PhpStorm.
 * User: jiaoyang
 * Date: 2019/8/6
 * Time: 下午9:46
 */

namespace app\index\controller;


use think\Controller;
use think\Exception;

/**
 * 思路:1.选择第一个元素作为分区的基准元素,比较其他元素和该基准函数的大小,小的放在左边数组,大的放在右边数组
 *      2.分别对上述左右数组重复步骤1
 *      3.直到数组的元素为一个或者空
 *      4.合并左分区,分区基准元素,右分区
 * Class QuickSort
 * @package app\index\controller
 */
class QuickSort extends  Controller
{


    public  function  sort(){
        $arr = [100,78,34,56,21,33,90,31,67,54];
        $resultArray = $this->quickSort($arr);
        print_r($resultArray);
    }

    public function quickSort($originArr){
        if(count($originArr)<=1){
            return $originArr;
        }
        if(!is_array($originArr)){
            throw new Exception('不是合法的数组');
        }
        $middle = $originArr[0];
        $left = array();
        $right = array();
        //切分左右数组
        foreach ($originArr as $value){
            if($value<$middle){
                $left[] = $value;
            }
            if($value>$middle){
                $right[] = $value;
            }
        }

        $left = $this->quickSort($left);
        $right = $this->quickSort($right);
        return array_merge($left,array($middle),$right);
    }

}

`
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容