zoukankan      html  css  js  c++  java
  • 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 ?>
  • 相关阅读:
    POJ 1611 The Suspects
    POJ 2001 Shortest Prefixes(字典树)
    HDU 1251 统计难题(字典树 裸题 链表做法)
    G++ C++之区别
    PAT 乙级 1013. 数素数 (20)
    PAT 乙级 1012. 数字分类 (20)
    PAT 乙级 1009. 说反话 (20)
    PAT 乙级 1008. 数组元素循环右移问题 (20)
    HDU 6063 17多校3 RXD and math(暴力打表题)
    HDU 6066 17多校3 RXD's date(超水题)
  • 原文地址:https://www.cnblogs.com/iaknehc/p/5988077.html
Copyright © 2011-2022 走看看