快速排序板子(备战蓝桥杯)

题目:

活动 - AcWing

蓝桥杯省赛无忧班(C&C++ 组)第 4 期_蓝桥杯 - 蓝桥云课

【模板】排序 - 洛谷

板子:

复制代码
void quick_sort(int q[] , int l , int r)
{
    if(l >= r) return ;

    //这里的x 尽量折半查找 不然找左区间或者右区间可能会卡测试样例
    int x = q[l + r >> 1] , i = l - 1 ,j = r + 1;

    while(i < j)
    {
        do i++; while(q[i] < x);
        do j--; while(q[j] > x);

        if(i < j) swap(q[i],q[j]);
    }

    quick_sort(q,l,j);
    quick_sort(q,j+1,r);
}

题解:

复制代码
#include<cstdio>
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1e6 + 10;
int n;
int q[N];

void quick_sort(int q[] , int l , int r)
{
    if(l >= r) return ;

    //这里的x 尽量折半查找 不然找左区间或者右区间可能会卡测试样例
    int x = q[l + r >> 1] , i = l - 1 ,j = r + 1;

    while(i < j)
    {
        do i++; while(q[i] < x);
        do j--; while(q[j] > x);

        if(i < j) swap(q[i],q[j]);
    }

    quick_sort(q,l,j);
    quick_sort(q,j+1,r);
}

int main()
{
    scanf("%d",&n);

    for(int i = 0 ; i < n ; i++) scanf("%d",&q[i]);

    quick_sort(q,0,n-1);

    for(int i = 0 ; i < n ; i++) printf("%d ",q[i]);
    return 0;
}
相关推荐
saltymilk5 小时前
C++ 模板参数推导问题小记(模板类的模板构造函数)
c++·模板元编程
感哥5 小时前
C++ lambda 匿名函数
c++
沐怡旸11 小时前
【底层机制】std::unique_ptr 解决的痛点?是什么?如何实现?怎么正确使用?
c++·面试
感哥12 小时前
C++ 内存管理
c++
博笙困了18 小时前
AcWing学习——双指针算法
c++·算法
感哥18 小时前
C++ 指针和引用
c++
感哥1 天前
C++ 多态
c++
沐怡旸1 天前
【底层机制】std::string 解决的痛点?是什么?怎么实现的?怎么正确用?
c++·面试
River4162 天前
Javer 学 c++(十三):引用篇
c++·后端
感哥2 天前
C++ std::set
c++