php实现快速排序算法
Posted 程序员的碎碎念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php实现快速排序算法相关的知识,希望对你有一定的参考价值。
理解
每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样只能在相邻的数之间进行交换,交换的距离就大得多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的,都是 O(N2),它的平均时间复杂度为 O (NlogN)。其实快速排序是基于一种叫做“二分”的思想。不稳定排序
代码实现
<?php
/**
* Created by PhpStorm.
* User: benny
* Date: 18-11-20
* Time: 下午5:01
*/
/**
* 快速排序
* @param $array
* @param $i
* @param $j
*/
function fast_sort(&$array,$i,$j){
if ($i>$j){
return;
}
$key = $array[$i]; //基数值
$left = $i; //左边哨兵$left
$right = $j; //右边哨兵$right
while ($i!=$j){
//往左边找第一个小于$key的值,直到找到
while($array[$j]>=$key && $i<$j){
$j--;
}
//往右边找第一个大于$key的值,直到找到
while($array[$i]<=$key && $i<$j){
$i++;
}
//两个都找到了,交换呗
if ( $i<$j){
$temp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $temp;
}
echo "操作:";
print_r($array);
echo '<br/>';
}
//执行下一趟快速排序
$array[$left] = $array[$i];
$array[$i] = $key;
fast_sort($array,$left,$i-1);
fast_sort($array,$i+1,$right);
}
$array = [6,12,9,2,2,33,822,12,4,22,3,2,1,7,9,8,7,7,7,7];
print_r($array);
echo "<br/>";
fast_sort($array,0,count($array)-1);
print_r($array);
今日作者: benny
不会UI的前端不是好后端
以上是关于php实现快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章