快速排序算法

文章介绍了快速排序的基本思想和步骤,包括选择参考点、光标查找和互换、递归排序两侧。提供了一个C++的快排模板代码,并展示了主函数的输入输出过程。

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

题目描述

快排模板题
快排模拟网站:https://visualgo.net/zh/sorting
快排思想:通过参考点将数组左侧的全换成小于参考点的右侧的全换成大于参考点的,从而定死参考点位置;
1.(定参)找到参考点(随机 l,r,l+r>>1,该题需要l+r>>1 才能ac);
2.(光标查找)左右两个光标分别找小于参考点,大于参考点的数据,一旦找到就停下,当i和j没有相遇就互换i和j光标所对 应的数据;
3.(递归两侧)直到l>=r即这个范围只有这一个数据;

样例
5
3 1 2 4 5
C++ 代码
#include<iostream>
using namespace std;
int const maxn=1e5+10;
int q[maxn];
//快排模板 
void quik_sort(int q[],int l,int r)
{
    //递归终止条件 
    if(l>=r) return;
    //1.定参 确定左光标,右光标,参考点 
    int i=l-1,j=r+1,x=q[(l+r)/2];
    //2. 光标查找互换 
    while(i<j)
    {
        while(q[++i]<x);
        while(q[--j]>x);
        if(i<j) swap(q[i],q[j]);
    }
    //3.递归左右 
    quik_sort(q,l,j);
    quik_sort(q,j+1,r);
}

//主函数的输入输出 
int main()
{
    int n; 
    cin>>n;
    for(int i=0;i<n;i++) scanf("%d",&q[i]);
    quik_sort(q,0,n-1);
    for(int i=0;i<n;i++) printf("%d ",q[i]);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道古九封

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值