其他典型算法-第2关:求第k小个元素

#include<iostream>

using namespace std;

int partition(int* A, int low, int high) {

    int temp = A[low];

    int i = low;

    int j = high;

    while (i < j) {

        while (i < j && A[j] > temp)j--;

        if (i < j) { A[i] = A[j]; i++; }


 

        while (i < j && A[i] < temp)i++;

        if (i < j) { A[j] = A[i]; j--; }

    }

    A[i] = temp;

    return i;

}

int best_sort_k(int *A,int x,int y,int k){

    /*

    A 序列

    x 首索引

    y 末尾索引

    k 找第几大的元素

    */

   

    /********** Begin **********/

    int i = partition(A, x, y);

    if (i == k - 1) {

        return A[i];

    }

    else if (i < k - 1) {

        return best_sort_k(A, i + 1, y, k);

    }

    else{

        return best_sort_k(A, x, i - 1, k);

    }

    /********** End **********/

}

int main(){

    int n;

    cin>>n;

    int a[n];

    for(int i=0;i<n;i++) cin>>a[i];

    int k,k_value;

    cin>>k;

    k_value=best_sort_k(a,0,n-1,k);

    cout<<k_value<<endl;

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值