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,52.从左到右,将每个元素与”基准”进行比较,形成两个子集。
12,25,37,5,==53==,89,98,923.对两个子集重复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)); }
相关文章推荐
- 排序算法之PHP版快速排序、冒泡排序
- PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
- 排序算法之PHP版快速排序、冒泡排序
- PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
- 排序算法系列---快速选择排序(C++)
- PHP四种基础排序算法--冒泡,直接插入,快速和选择排序
- PHP排序算法系列:插入排序
- 排序算法系列-交换之快速排序
- PHP基础排序算法(四)快速排序
- 【PHP-排序算法】快速排序、堆排序算法时间复杂度比较
- [讨论]php 排序系列的函数内部的C实现是用了哪种排序算法?
- PHP排序算法系列:直接选择排序
- PHP排序算法系列之桶排序详解
- PHP常用排序算法 冒泡排序 快速排序 插入排序
- 排序算法系列-堆排序-快速排序-基数排序-简单选择排序-归并排序
- 【算法与数据结构必备】PHP常用排序算法:冒泡,快速排序,插入排序(一维数组)
- 排序算法系列:快速排序
- 快速排序 php实现 算法学习
- 快速排序 php与javascript的不同之处
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡