【算法】快速排序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];
}
相关推荐
大江东去浪淘尽千古风流人物几秒前
【cuVSLAM】GPU 加速、多相机、实时视觉/视觉惯性 SLAM设计优势
c++·人工智能·数码相机·ubuntu·计算机视觉·augmented reality
自信150413057596 小时前
重生之从0开始学习c++之模板初级
c++·学习
leobertlan6 小时前
好玩系列:用20元实现快乐保存器
android·人工智能·算法
青梅橘子皮6 小时前
C语言---指针的应用以及一些面试题
c语言·开发语言·算法
历程里程碑6 小时前
2. Git版本回退全攻略:轻松掌握代码时光机
大数据·c++·git·elasticsearch·搜索引擎·github·全文检索
极客智造7 小时前
深度解析 C++ 类继承与多态:面向对象编程的核心
c++
_深海凉_7 小时前
LeetCode热题100-有效的括号
linux·算法·leetcode
零号全栈寒江独钓9 小时前
基于c/c++实现linux/windows跨平台获取ntp网络时间戳
linux·c语言·c++·windows
CSCN新手听安10 小时前
【linux】高级IO,以ET模式运行的epoll版本的TCP服务器实现reactor反应堆
linux·运维·服务器·c++·高级io·epoll·reactor反应堆
被开发耽误的大厨10 小时前
1、==、equals、hashCode底层原理?重写场景?
算法·哈希算法