【算法】快速排序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];
}
相关推荐
tan180°3 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
大千AI助手3 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
彭祥.4 小时前
Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类
c++·opencv·分类
lzb_kkk4 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
YuTaoShao5 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
生态遥感监测笔记5 小时前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
Tony沈哲5 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
刘海东刘海东6 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习
胖大和尚6 小时前
clang 编译器怎么查看在编译过程中做了哪些优化
c++·clang