php实现快速排序算法

Posted 程序员的碎碎念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php实现快速排序算法相关的知识,希望对你有一定的参考价值。

理解

每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样只能在相邻的数之间进行交换,交换的距离就大得多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的,都是 O(N2),它的平均时间复杂度为 O (NlogN)。其实快速排序是基于一种叫做“二分”的思想。不稳定排序

代码实现

 
   
   
 
  1. <?php

  2. /**

  3. * Created by PhpStorm.

  4. * User: benny

  5. * Date: 18-11-20

  6. * Time: 下午5:01

  7. */

  8. /**

  9. * 快速排序

  10. * @param $array

  11. * @param $i

  12. * @param $j

  13. */

  14. function fast_sort(&$array,$i,$j){

  15.    if ($i>$j){

  16.        return;

  17.    }

  18.    $key = $array[$i]; //基数值

  19.    $left = $i;         //左边哨兵$left

  20.    $right = $j;        //右边哨兵$right


  21.    while ($i!=$j){

  22.        //往左边找第一个小于$key的值,直到找到

  23.        while($array[$j]>=$key && $i<$j){

  24.            $j--;

  25.        }

  26.        //往右边找第一个大于$key的值,直到找到

  27.        while($array[$i]<=$key && $i<$j){

  28.            $i++;

  29.        }

  30.        //两个都找到了,交换呗

  31.        if ( $i<$j){

  32.            $temp = $array[$i];

  33.            $array[$i] = $array[$j];

  34.            $array[$j] = $temp;

  35.        }

  36.        echo "操作:";

  37.        print_r($array);

  38.        echo '<br/>';

  39.    }

  40.    //执行下一趟快速排序

  41.    $array[$left] = $array[$i];

  42.    $array[$i] = $key;

  43.    fast_sort($array,$left,$i-1);

  44.    fast_sort($array,$i+1,$right);

  45. }




  46. $array = [6,12,9,2,2,33,822,12,4,22,3,2,1,7,9,8,7,7,7,7];

  47. print_r($array);

  48. echo "<br/>";


  49. fast_sort($array,0,count($array)-1);

  50. print_r($array);




今日作者: benny

不会UI的前端不是好后端


以上是关于php实现快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章

算法PHP实现冒泡排序和快速排序--防遗忘

快速排序的php实现

PHP实现快速排序

PHP如何实现快速排序?

PHP 快速排序

php实现快速排序算法