前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php实现快速排序算法

php实现快速排序算法

作者头像
benny
发布2018-12-24 15:46:56
1.1K0
发布2018-12-24 15:46:56
举报

理解

每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样只能在相邻的数之间进行交换,交换的距离就大得多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的,都是 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);

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的碎碎念 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 理解
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档