quick_sort ——第k个数

思路:本题就是一个快速排序的模板题,通过对数组中的数字进行从小到大排序,从左到右第k个数,但得注意数组下标是从0开始,所以答案应该是排序后数组下标为k-1

如果您还不了解快速排序,请移步这篇文章,https://www.cnblogs.com/expect-999/p/17594345.html

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1e5+10;

int n,k;
int q[N];

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

signed main()
{
    cin >> n >> k;
    
    for(int i=0;i<n;++i) cin >> q[i];
    
    quick_sort(q,0,n-1);
    
    cout << q[k-1];
    
    return 0;
}

本人蒟蒻,如有错误或者不当的地方还望指点,如果对您有所帮助,请给我点赞,这真的对我很重要,感谢观看我的博客

posted @ 2024-04-18 14:18  小卷同学  阅读(1)  评论(0编辑  收藏  举报