vlambda博客
学习文章列表

数据结构和算法——快速排序



1、要解决的问题

给定如下所示的数字列表,请按升序对它们进行排序。

$numbers = [21,25,100,98,89,77];

要求

  • 对数字进行排序时,需要使用插入快速算法

  • 用PHP实现该算法

2、伪代码说明

快速排序也是一种分治算法,类似于合并排序。它通过从列表中选择一个元素(轴)并在其左侧放置小于轴的元素,在其右侧放置大于轴的元素来工作。我们对左侧和右侧重复上述步骤,直到无法再划分列表为止。

选择轴可能很棘手,通常我们只使用第一个或最后一个元素。


描述快速排序的伪代码如下:

PROCEDURE function quickSort IF list is empty Return the list END IF  Choose first element as the pivot  FOR each element of the list start from position 1  IF element is greater than pivot Assign it to the left side ELSE Assign it to the right side END IF  END FOR  return quickSort(left)+pivot+quickSort(right) END PROCEDURE

3、PHP实现快速排序

如我们所见,我们对该算法使用了递归。通常,分治法算法意味着该算法可以递归编写。

<?php$arrayToSort = [21, 25, 100, 98, 89, 77]; function quickSort($data){ if (count($data) == 0) { return $data; }  $pivot = $data[0];  $left = $right = [];  for ($i = 1; $i < count($data); $i++) { if ($data[$i] < $pivot) { $left[] = $data[$i]; } else { $right[] = $data[$i]; } }  return array_merge(quicksort($left), array($pivot), quicksort($right));} print_r(quickSort($arrayToSort)); // Output:/*Array( [0] => 21 [1] => 25 [2] => 77 [3] => 89 [4] => 98 [5] => 100)*/

作为一种分而治之的算法,快速排序算法确实非常简单。