欢迎访问宙启技术站
智能推送

快速排序在PHP中的实现方法

发布时间:2023-06-11 10:21:42

快速排序(Quicksort)是一种常见的排序算法,其时间复杂度为O(nlogn)。它的基本思想是通过选取一个基准值,将数组分成两部分进行排序,从而达到整个数组有序的目的。快速排序是一种原址排序算法,因此不需要额外的内存空间来存储新的数组。

在PHP中,我们可以通过递归的方式来实现快速排序。具体实现方式如下:

1.首先,我们需要选择一个基准值。通常情况下,我们选择数组中的第一个元素作为基准值。

2.然后,我们需要将数组分成两部分,使得左半部分小于基准值,右半部分大于基准值。

3.然后,对左右两部分分别递归进行快速排序。

4.最后,将左半部分、基准值和右半部分拼接起来,形成一个有序数组。

具体实现如下:

function quickSort($arr) {

  $len = count($arr);

  if($len <= 1) {

    return $arr;//递归出口

  }

  $base = $arr[0];//基准值

  $leftArr = array();//左半部分数组

  $rightArr = array();//右半部分数组

  for($i = 1; $i < $len; $i++) {

    if($arr[$i] < $base) {

      $leftArr []= $arr[$i];

    } else {

      $rightArr []= $arr[$i];

    }

  }

  $leftArr = quickSort($leftArr);//递归左半部分排序

  $rightArr = quickSort($rightArr);//递归右半部分排序

  return array_merge($leftArr, array($base), $rightArr);//合并左半部分、基准值和右半部分

}

使用样例:

$arr = array(5,1,4,2,8);

$res = quickSort($arr);

print_r($res);

输出结果:

Array

(

    [0] => 1

    [1] => 2

    [2] => 4

    [3] => 5

    [4] => 8

)

快速排序相比于其他排序算法,具有以下优点:

1.时间复杂度低,平均情况下O(nlogn)。

2.空间复杂度低,仅需要一个递归栈。

3.是一种原址排序算法,不需要额外的内存空间,是一种比较经济的排序算法。

4.实现简单,代码量较少。

但是快速排序也有一些缺点:

1.最坏情况下,时间复杂度会退化到O(n^2),需要进行优化。

2.对于一些特殊的、有大量相同元素的数组,其排序效率比较低。