AcWing 785:快速排序 ← vector

news/2024/5/20 0:30:20 标签: 快速排序, vector

【题目来源】
https://www.acwing.com/problem/content/787/

【题目描述】
给定你一个长度为 n 的整数数列。
请你使用快速排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。

【输入格式】
输入共两行,第一行包含整数 n。
第二行包含 n 个整数(所有整数均在 1∼10^9 范围内),表示整个数列。

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

【数据范围】
1≤n≤100000

【输入样例】
5
3 1 2 4 5

【输出样例】
1 2 3 4 5

【算法分析】
历史上,发过两篇关于快速排序的博文,链接如下:
https://blog.csdn.net/hnjzsyjyj/article/details/127825125
https://blog.csdn.net/hnjzsyjyj/article/details/119768770

但是,在提交至本题时,一直提示 
Time Limit Exceeded。估计是本题数据加强的原因。同学们可自行分析原因。

【算法代码】

#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;

void quicksort(vector<int> &v, int le, int ri) {
    if(le>=ri) return;
    int mid=v[le+ri>>1];
    
    //交换时i的初始值为le-1,以保证选择到第一个大于mid的数v[i]
    //交换时j的初始值为ri+1,以保证选择到第一个小于mid的数v[j]
    int i=le-1;
    int j=ri+1;
    while(i<j) {
        while(v[++i]<mid){};
        while(v[--j]>mid){};
        if(i<j) swap(v[i],v[j]);
    }

    quicksort(v,le,j);
    quicksort(v,j+1,ri);
}

int main() {
    int n;
    scanf("%d", &n);
    
    vector<int> v;
    for(int i=0; i<n; i++) {
        int x;
        scanf("%d", &x);
        v.push_back(x);
    }

    quicksort(v,0,n-1);

    for(int i=0; i<n; i++) printf("%d ",v[i]);

    return 0;
}



/*
in:
30
128 294 133 295 175 8 232 248 241 164 11 60 238 133 291 116 6 67 98 67 196 260 181 160 83 160 90 153 233 216

out:
6 8 11 60 67 67 83 90 98 116 128 133 133 153 160 160 164 175 181 196 216 232 233 238 241 248 260 291 294 295
*/






【参考文献】
https://blog.csdn.net/a695484357/article/details/126242857
https://www.acwing.com/problem/content/solution/787/1/


 


http://www.niftyadmin.cn/n/4995500.html

相关文章

[贪心] 拼接最小数

这道题思路并不难&#xff0c;我主要想学习其一些对于字符串的处理。 代码如下&#xff1a; #include <iostream> #include <string> #include <algorithm> using namespace std;const int MAXN 10000; string nums[MAXN];bool cmp(string a, string b) {…

React笔记(六)React路由

一、React路由简介 React 官方并没有提供对应的路由插件&#xff0c;因此&#xff0c;我们需要下载第三方的路由插件 —— React Router DOM。 React Router 在 2021 年 11 月份的时候更新 v6 的版本。本次课就主要讲解V6版本 二、路由配置 1、下载路由 在项目根目录中&am…

flutter plugins插件【三】【Flutter Intl】

3、 Flutter Intl 多语言国际化 在Android Studio中菜单Tools找到flutter intl创建多语言配置。 创建后会在pubspec.yaml出现 flutter_intl:enabled: true 在工程的lib会生成l10n与generated文件夹 l10n包含 intl_en.arb intl_zn.arb 我们在intl_en.arb添加 { home: &quo…

内网隧道代理技术(二十)之 CS使用HTTP代理上线不出网机器

CS使用HTTP代理上线不出网机器 CS工具自带上线不出网机器 如图A区域存在一台中转机器,这台机器可以出网,这种是最常见的情况。我们在渗透测试的过程中经常是拿下一台边缘机器,其有多块网卡,边缘机器可以访问内网机器,内网机器都不出网。这种情况下拿这个边缘机器做中转,…

vscode远程调试php

使用vscode远程调试php的方法 1.安装remote ssh插件 2.连接服务器 可以点击左下角的绿色按钮&#xff0c;或者ctrlshiftp打开命令框输入remote ssh应该也有。 3.在服务器端vscode安装php debug插件 4.安装xdebug xdebug是用来调试php的软件&#xff0c;原本和vscode没什么关…

Vue中双向数据绑定及底层原理

Vue中的双向数据绑定是指数据的变化可以自动更新到视图&#xff0c;同时用户在视图上的操作也可以同步更新到数据。这种机制使得开发者无需手动操作DOM来实现数据与视图的同步。 Vue实现双向数据绑定的底层原理主要包括以下几个方面&#xff1a; 数据劫持&#xff1a;Vue通过使…

在Mac 上安装flutter 遇到的问题

准备工作 1、升级Macos系统为最新系统 2、安装最新的Xcode 3、电脑上面需要安装brew https://brew.sh/ 4、安装chrome浏览器(开发web用) 下载Flutter、配置Flutter环境变量、配置Flutter镜像 下载Flutter SDK https://docs.flutter.dev/release/archive?tabmacos 根据自己…

10 | Spark 查找每个单词的最大行号

假设你有一个包含文本行号和文本内容的RDD,现在你想找出每个单词出现在哪些行,并计算它们出现的最大行号。 需求是从包含文本行号和文本内容的RDD中找出每个单词出现在哪些行,并计算它们出现的最大行号。 具体需求如下: 数据输入: 代码从一个包含文本行号和文本内容的RD…