基于快排的算法面试题partition

这篇博客探讨了如何利用快速排序的partition方法解决找到无序数组中第k个元素的问题。通过选取数组的第一个元素作为基准,进行一次循环,找到符合条件的下标index,将数组分为两部分并保持有序。这个过程平均时间复杂度为nlog(n)。同时,介绍了快排的不稳定性,并提及在LeetCode的2.1.5题‘两个排序数组的中位数’以及剑指Offer中的相关面试题,这些题目同样体现了快排思想的应用。
摘要由CSDN通过智能技术生成

常见算法找到无序数组的第k个,采用的方法:
利用快排的思想,每个找到下标index,比较
基本思想:
首先选取数组第一个元素temp,然后经过一次循环,找到index下标,使得前面的值比该temp小,后面的值比该temp大,这样就将数组分成了2个子数组,并且排好了temp的位置index;然后分别按上面将子数组继续执行,直到子数组为空。平均时间复杂度nlog(n)。(每次平均分成了log(n)组,每次找index (快速划分)时间复杂度O(n)。) 其中快速划分平均时间复杂度O(n)。
partition每次是不稳定的,快排是不稳定的。

基本的快排算法:

function quickSort(&$arr,0,count($arr)-1);
function quickSort(&$arr,$begin,$end)
{
    if(false==is_array($arr)) return false;
    if($end<$begin) return;
    $temp=$arr[$begin];
    $i=$begin;$j=$end;
    while($i<$j){
        while($i<$j&&$arr[$j]>$temp){
            $j--;
        }
        $arr[$i]=$arr[$j] ;
        while($i<$j&&$arr[$i]<=$temp){
            $i++;
        }
        $arr[$j]=$arr[$i];
    }
    $arr[$i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值