【算法】快速排序2

题目

给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k个数。
输入格式

第一行包含两个整数 n和 k。

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

输出一个整数,表示数列的第 k 小数。
数据范围

1≤n≤100000, 1≤k≤n
输入样例:

5 3 2 4 1 5 3
输出样例:

3

来源:acwing算法基础 786. 第k个数


思路(注意事项)

while给漏了:一次递归要循环到 i 与 j 相遇为止。


题解

c 复制代码
#include<bits/stdc++.h>

using namespace std;

const int N = 100000;
int n;
int a[N];

void qsort (int a[], int l,int r)
{
	if (l >= r) return;
	
	int x = a[(l + r) / 2 ];
	int i = l - 1, j = r + 1;
	
	while (i < j)
	{
	do i ++; while(a[i] < x);
	do j --; while(a[j] > x);
	if (i < j) swap (a[i], a[j]);
	}
	
	qsort (a, l, j);
	qsort (a, j + 1, r);
}

int main()
{
	int n, k;
	cin >> n >> k;
	
	for (int i = 0; i < n; i ++)
		cin >> a[i];
	
	qsort(a, 0, n - 1);
	cout << a[k - 1];
}
相关推荐
彧azz20 分钟前
算法设计与分析:贪心与动态规划
数据结构·学习·算法·贪心算法·动态规划
Beyond_System|系统之外1 小时前
【学编程】Python基础编程题100道(21-60)
开发语言·python·算法
汉克老师2 小时前
GESP2026年9月认证C++六级( 第三部分编程题(1、数组划分))精讲
c++·gesp·小学生·学c++编程
千里码aicood3 小时前
基于PLC与机器视觉的智能分拣控制系统设计
c++·自动化·plc
漂流瓶jz3 小时前
UVA-1442 洞穴 题解答案代码 算法竞赛入门经典第二版
c++·算法·题解·aoapc·算法竞赛入门经典·uva
朽棘不雕3 小时前
进一步了解模板
c++
叠层归一研究院4 小时前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
Selvaggia5 小时前
Diffusion Model 的基本原理与模型架构
算法
汉克老师6 小时前
CSP-J 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-j·小学生·学c++编程
wabs6667 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树