php实现快速排序

php实现快速排序

这几上代码

一、代码

代码一:

 1 <?php
 2 function q($array) {
 3   if (count($array) <= 1) {return $array;}
 4 //以$key为界,分成两个子数组
 5   $key = $array[0];
 6   $l = array();
 7   $r = array();
 8 //分别进行递归排序,然后合成一个数组
 9   for ($i=1; $i<count($array); $i++) {
10   if ($array[$i] <= $key) { $l[] = $array[$i]; }
11   else { $r[] = $array[$i]; }
12  }
13   $l = q($l);
14   $r = q($r);
15   return array_merge($l, array($key), $r);
16 }
17 $arr = array(1,2,44,3,4,33);
18 print_r( q($arr) );

代码二:在thinkphp的控制器中

 1 <?php
 2 namespace appindexcontroller;
 3 
 4 use appindexcontrollerBase;
 5 
 6 class Exercise extends Base
 7 {
 8     public function index()
 9     {
10         // return view('insert_array');
11         $this->quickSortDemo();
12     }
13 
14     //快速排序(递归)
15     public function quickSort($arr){
16         //0、递归返回条件
17         if(count($arr)<=1) return $arr;
18         //1、找到分割点
19         $mid = $arr[0];
20         $l = array();
21         $r = array();
22         //2、对数据进行分割,也就是对除分割点外的每个数据进行遍历
23         for($i=1;$i<count($arr);$i++){
24             if($arr[$i]<$mid) $l[] = $arr[$i];
25             else  $r[] = $arr[$i];
26         }
27         $l=$this->quickSort($l);
28         $r=$this->quickSort($r);
29         //3、对分割的数据进行组合
30         return array_merge($l,array($mid),$r);
31     }
32 
33     public function quickSortDemo(){
34         $arr=array(19,65,2,5,1,456,32,64564,2,7,9,2);
35         dump($this->quickSort($arr));
36     }
37 }

1、第20行,这里是用新数组来存分割出来的数据,而不是在原数据的基础上交换,一种典型的那空间换低算法复杂度

2、第27行,实在容易忘记接收返回值

3、第27行,因为在thinkphp中,这个this->好像都不能省的样子,后者还有什么别的原因

4、第30行,array的那些函数,前缀都是array_,而不是arr_,array_merge()的参数必须是数组

5、第30行,array()参数是变量的时候可以将变量化为数组,其实就和array的定义那样

6、第24行,数组添加值,稍微注意一下就好

7、快排的核心点,找好分割点,可以拿第一个点做分割点

截图

原文地址:https://www.cnblogs.com/Renyi-Fan/p/8979324.html