快速排序,php实现

2020-05-06  本文已影响0人  designer

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

<?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);
    }

}

`
上一篇 下一篇

猜你喜欢

热点阅读