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

题目:

活动 - 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;
}
相关推荐
骁的小小站1 小时前
Verilator 和 GTKwave联合仿真
开发语言·c++·经验分享·笔记·学习·fpga开发
旭意5 小时前
C++蓝桥杯之结构体10.15
开发语言·c++
深思慎考6 小时前
调用百度云语音识别服务——实现c++接口识别语音
c++·语音识别·百度云
K 旺仔小馒头7 小时前
优选算法:01 双指针巧解移动零问题
c++·算法·刷题
AlexMercer10128 小时前
Ubuntu从零开始配置Git
c++·git·ubuntu·gitee
无敌最俊朗@9 小时前
C++ STL Deque 高频面试题与答案
开发语言·c++
和编程干到底10 小时前
C++基础
开发语言·c++
John.Lewis11 小时前
C++初阶(14)list
开发语言·c++·笔记
hsjkdhs11 小时前
C++文件操作
开发语言·c++
沐怡旸12 小时前
【穿越Effective C++】条款4:确定对象使用前已先被初始化——C++资源管理的基石
c++·面试