• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

php实现快速排序

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这几上代码

一、代码

代码一:

 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 app\index\controller;
 3 
 4 use app\index\controller\Base;
 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、快排的核心点,找好分割点,可以拿第一个点做分割点

 

截图

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
nginx+php在调试过程中临时关闭缓存发布时间:2022-07-10
下一篇:
vscode使用php调试发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap