您的位置:首页 > 编程语言 > PHP开发

PHP排序算法系列:快速排序

2017-04-20 21:33 281 查看

快速排序

快速排序(Quicksort)是对冒泡排序的一种改进。

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

原理

快速排序采用的思想是分治思想。

快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

实现方法

(1)在数据集之中,选择一个元素作为”基准”(pivot)。

(2)所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。

(3)对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

举例

对数组[53,89,12,98,25,37,92,5]进行排序

1.选择第一个元素
53
作为基准。

==53==,89,12,98,25,37,92,5

2.从左到右,将每个元素与”基准”进行比较,形成两个子集。

12,25,37,5,==53==,89,98,92

3.对两个子集重复1,2操作,直到所有子集元素只剩下一个元素为止。

(5,==12==,25,37),53,(==89==,98,92)

5,12,(25,37),53,89,(98,92)

5,12,25,37,53,89,92,98

PHP代码实现

function quick_sort($arr){
$length=count($arr);
if($length<=1){
return $arr;
}
$left=$right=array();
//将$arr[0]作为基准值
$pivot=$arr[0];
for ($i=1; $i <$length ; $i++) {
if($arr[$i]<$pivot){
$left[]=$arr[$i];
}else{
$right[]=$arr[$i];
}
}
return array_merge(quick_sort($left),(array)$pivot,quick_sort($right));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息