zoukankan      html  css  js  c++  java
  • 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、快排的核心点,找好分割点,可以拿第一个点做分割点

    截图

  • 相关阅读:
    旧文备份:CANopen协议PDO的几种传输方式
    CANopen 基础
    单片机FLASH与RAM、ROM的关系
    在CANopen网络中通过LSS服务设置节点地址和网络波特率
    STM32F103 CAN中断发送功能的再次讨论
    由RS-232串口到PROFIBUS-DP总线的转换接口设计
    profibus 的DPV0 和DPV1
    PROFIBUS-DP
    profibus总线和profibus dp的区别
    获取验证码倒计时
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8979324.html
Copyright © 2011-2022 走看看