AcWing785.快速排序.【c++】

本文介绍了一道ACWing编程题的解决方案,题目要求使用快速排序算法对整数序列进行升序排列。通过递归实现快速排序,并提供完整的C++代码实现。

一、题目

给定你一个长度为 n 的整数数列。

请你使用快速排序对这个数列按照从小到大进行排序。

并将排好序的数列按顺序输出。

输入格式

输入共两行,第一行包含整数 n。

第二行包含 n 个整数(所有整数均在 1∼10^9范围内),表示整个数列。

输出格式

输出共一行,包含 n 个整数,表示排好序的数列。

数据范围

1≤n≤100000

输入样例:

5
3 1 2 4 5

输出样例:

1 2 3 4 5

二、解答

AcWing的第一课,快排。

#include <iostream>
using namespace std;

const int N = 100010;

void quick_sort(int q[],int l, int r)
{
    if(l >= r) return;
    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()
{
    int n;
    int q[N];
    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;
}

### AcWing 平台上的快速排序教程与题目 #### 快速排序简介 快速排序采用分治策略来实现排序操作。该算法通过选取一个基准元素,将数组划分为小于等于基准值的部分大于基准值的部分,递归处理这两部分数据直至整个序列变得有序[^3]。 #### 实现细节 对于给定的一段数组`q[]`及其左右端点`l``r`: - **选择枢轴**:可以从三个位置(最左边、最右边以及中间)随机挑选作为划分依据的数值。 - **分区过程**:调整元素顺序使左侧所有项不大于选定的关键字而右侧则相反;此阶段结束后得到新的边界索引用于后续子区间处理。 - **递归调用**:分别针对前后两片区域重复上述动作直到各片段长度降为零或单一元素为止。 下面是具体的C++代码示例展示如何编写这样一个函数: ```cpp void quick_sort(int q[], int l, int r) { if (l >= r) return; int i = l - 1, j = r + 1; int x = q[(l + r) >> 1]; // 取中位数 while (i < j) { do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) std::swap(q[i], q[j]); } quick_sort(q, l, j); // 对左半边进行快排 quick_sort(q, j + 1, r); // 对右半边进行快排 } ``` #### 时间复杂度分析 理想情况下每次都能均匀分割输入列表,则其性能接近最优状态即O(nlogn),然而当初始排列已经近乎完全有序时可能会退化成平方级别的时间消耗O(n²)[^2]。 #### 相关练习题推荐 为了更好地理解掌握这一经典排序方法,在线编程教育网站AcWing提供了多个涉及不同应用场景下的实例供学习者实践尝试解决实际问题的能力培养。以下是几个可供参考的选择方向: ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值