快速选择排序

参考:

AcWing 786. 第k个数_MangataTS的博客-CSDN博客

题目:

活动 - AcWing

找到整个区间第k小的数
 

基本思路:

SL左边的数的个数,SR右边的数的个数。比较和K的大小,就可以判断第k小的数在哪个区间。

然后再子区间寻找第k-SR或k-SR小的数。

时间复杂度:o(n)

 快速选择排序_第1张图片

代码

#include
using namespace std;

const int N = 1e6 +10;

int n,k;//所有数的个数,第k小数
int q[N];


int quick_sort(int l,int r,int m)//m初始的值为k
{
    while(l == r) return q[l];
    
    int x = q[l+r>>1], i = l-1,j = r+1;
    while(ix);
        while(i>n>>k;
    for(int i =0; i>q[i];
     
    cout<

你可能感兴趣的:(acwing算法基础课,算法,c++,数据结构)