快速排序经典算法(分治法,挖坑法,前后指针法,非递归)

本文详细介绍了快速排序的几种实现方式,包括分治法、挖坑法和前后指针法,并探讨了非递归实现。通过三数取中法选择基准值,优化排序效率。快速排序适用于数据量大且无序的序列,避免最坏情况以达到平均时间复杂度O(N log N)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序最优的情况就是当关键值位于序列中间时
快速排序最坏的情况就是对已序的序列进行排序
时间复杂度:O(N^2)最差
使用场景:数据量大而杂乱的序列,避免出现最坏的情况
快速排序递归算法之分治法
基本思路:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。

//取一个关键元素,将序列分为两部分,然后分别排序
int partion(int arr[], int left, int right)
{
    int begin = left;
    int end = right-1;
    int key = arr[right];//关键元素

    while (begin < end)
    {
        //找到一个比关键元素大的元素
        while (begin<end&&arr[begin] <= key)
            begin++;
        //找到一个比关键元素晓得元素
        while (begin<end&&arr[end] >= key)
            end--;
        if (begin<end)
        {
            //交换
            std::swap(arr[begin], arr[end]);
            begin++;
            end--;

     
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值