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、快排的核心点,找好分割点,可以拿第一个点做分割点
截图