快速排序 C++

server/2024/11/29 16:06:11/

题目一

在这里插入图片描述

解题思路

快排思路

  1. 首先设定一个分界值(基准值),通过该分界值将数组分成左右两部分。
  2. 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。
  3. 左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
  4. 重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

PS:快排算法的边界处理非常繁琐, 建议直接背一个快排模板直接用

代码实现

#include<iostream>
#include<algorithm>using namespace std;const int N = 1e5 + 10;
int a[N];void quick_sort(int a[], int l, int r)
{if (l >= r){return ;}int i = l, j = r;int pivot = a[(l + r) >> 1];while (i <= j){while (a[i] < pivot){i ++;}while (a[j] > pivot){j --;}if (i <= j){swap(a[i], a[j]);i ++;j --;}}quick_sort(a, l, j);quick_sort(a, i, r);
}int main()
{int n;cin >> n;for (int i = 0; i < n; i ++ ){scanf("%d", &a[i]);}quick_sort(a, 0, n - 1);for (int i = 0; i < n; i ++ ){printf("%d ", a[i]);}return 0;
}

题目二

在这里插入图片描述

解题思路

与题一相同

代码实现

#include<iostream>
#include<algorithm>using namespace std;const int N = 1e5 + 10;
int a[N];void quick_sort(int l, int r, int a[])
{if (l >= r){return ;}int i = l, j = r, pivot = a[(l + r) >> 1];while (i <= j){while (a[i] < pivot){i ++;}while (a[j] > pivot){j --;}if (i <= j){swap(a[i], a[j]);i ++;j --;}}quick_sort(l, j, a);quick_sort(i, r, a);
}int main()
{int n, k;cin >> n >> k;for (int i = 0; i < n; i ++ ){scanf("%d", &a[i]);}quick_sort(0, n - 1, a);printf("%d", a[k - 1]);return 0;
}

http://www.ppmy.cn/server/145941.html

相关文章

【Maven Helper】分析依赖冲突案例

目录 Maven Helper实际案例java文件pom.xml文件运行抛出异常分析 参考资料 Maven Helper A must have plugin for working with Maven. easy way for analyzing and excluding conflicting dependenciesactions to run/debug maven goals for a module that contains the cur…

通过DBUA升级 Oracle 11g到Oracle12c版本

Oracle 11g升级到Oracle12c Oracle11g数据库环境准备与数据备份 环境&#xff1a; oracle11.2.0.4 to oralce12.2.0.1 升级方案&#xff1a; 升级方案很多种&#xff0c;我们ORACLE培训课程第8阶段有所讲所有的升级方案&#xff0c;我们这里采用DBUA官方建议的方法 1、手…

ctfshow -web 89-115-wp

89. 显然&#xff0c;这里是需要绕过preg_match&#xff0c;绕过preg_match有三种方法 CTF 总结02&#xff1a;preg_match()绕过_pregmatch函数绕过-CSDN博客 90. 考intval。 这个与赣ctf有道题差不多&#xff0c;我是直接传入num4476a&#xff0c;intval&#xff08;4476a&a…

Vue 开发中为什么要使用穿透符::deep()

在 Vue 开发中&#xff0c;有时候样式需要穿透才能生效&#xff0c;通常是因为使用了作用域样式 (scoped styles) 的缘故。 1. 什么是作用域样式 (scoped styles)? 在 Vue 单文件组件 (SFC) 中&#xff0c;使用 <style scoped> 声明的样式只会作用于当前组件的元素。Vu…

【Qt】QDateTimeEdit控件实现清空(不保留默认时间/最小时间)

一、QDateTimeEdit控件 QDateTimeEdit 提供了一个用于编辑日期和时间的控件。用户可以通过键盘或使用上下箭头键来增加或减少日期和时间值。日期和时间的显示格式根据设置的格式显示&#xff0c;可以通过 setDisplayFormat() 方法来设置。 二、如何清空 我在使用的时候&#…

第十二章 使用 BIND 提供域名解析服务

1. DNS 域名解析服务 相较于由数字构成的 IP 地址&#xff0c;域名更容易被理解和记忆&#xff0c;所以我们通常更习惯通过域名的方式来访问网络中的资源。但是&#xff0c;网络中的计算机之间只能基于 IP 地址来相互识别对方的身份&#xff0c;而且要想在互联网中传输数据&…

Anaconda3 2024 jupyter notebook 配置默认文件路径

我的版本如下&#xff1a; 第一步&#xff1a; 打开命令行anaconda prompt &#xff0c; 敲下面命令生成配置文件 jupyter notebook --generate-config 如下图&#xff1a; 修改配置jupyter_notebook_config.py 文件中搜索c.ServerApp.root_dir &#xff08; 对于 Anac…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…