• PHP快速排序


    基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

     1 <?php
     2 /*
     3  * 重点是递归思想的理解
     4  *一维数组的排序
     5  *@param  $array   需要排序的数组
     6  */
     7 $array=[34,12,23,565,89,6,25,67,45,767,342,98,2];
     8 function qiuck_sort($array){
     9     //如果数组中元素只有一个,则不需要比较,也是递归终止的条件
    10     if(count($array)<=1){
    11         return $array;
    12     }
    13     /*
    14      * 取一个参考元素,后面的元素与它比较
    15      * 小的放在左边,大的放在右边,按照
    16      * 此方法分割,直到不能分割为止
    17      */
    18     $rightArray=$leftArray=array();
    19     $base=$array[0];//参考元素,随便选取数组中的一个元素即可
    20     //for循环比较
    21     for($i=1;$i<count($array);$i++){
    22         if($array[$i]<$base){
    23             $leftArray[]=$array[$i];
    24         }else{
    25             $rightArray[]=$array[$i];
    26         }
    27     }
    28     //循环完后,将分割后的数组再次按照相同的方法
    29     //进行排序分割,直到不能分割位置
    30     $left_tmp=qiuck_sort($leftArray);
    31     $right_tmp=  qiuck_sort($rightArray);
    32     //合并最后的结果并返回
    33     $result=array_merge($left_tmp,array($base),$right_tmp);
    34     
    35     return $result;
    36 }
    37 
    38 print_r(qiuck_sort($array));
    39 
    40 
    41 排序后的数组:
    42 Array ( [0] => 2 [1] => 6 [2] => 12 [3] => 23 [4] => 25 [5] => 34 [6] => 45 [7] => 67 [8] => 89 [9] => 98 [10] => 342 [11] => 565 [12] => 767 
    43 ?>
  • 相关阅读:
    第24课 多线程开发
    第23课 装饰器
    第22课 调用外部程序
    第20课 异常处理
    第19课 习题讲解
    第18课 面向对象
    第17课 调试程序
    第16课 pycharm 使用
    第15课 模块与包
    第14课 再识函数
  • 原文地址:https://www.cnblogs.com/iaknehc/p/5988077.html
Copyright © 2020-2023  润新知