思路: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);
}
}
`