第K大数(快排思想)

利用快速排序,对QuickSort()进行改进:
void --> int,return的内容如果需要递归,则return QuickSort(),如果找到结果,return arr[left]。

/*
-------------------------------------------------
   Author:       wry
   date:         2022/3/2 11:14
   Description:  test
-------------------------------------------------
*/

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1000+10;
int arr[MAXN];

int GetLocation(int left,int right) {
    int random = left + rand()%(right-left+1);
    swap(arr[left],arr[random]);
    while (left<right) {
        while (left<right && arr[left]<arr[right]) {
            right--;
        }
        swap(arr[left],arr[right]);
        while (left<right && arr[left]<arr[right]) {
            left++;
        }
        swap(arr[left],arr[right]);
    }
    return left;
}

int QuickSort(int left,int right,int k) {
    while (left<right) {
        int position = GetLocation(left,right);
        if (position>k) {
            return QuickSort(left,position-1,k);
        }
        else if (position<k) {
            return QuickSort(position+1,right,k);
        }
        else {
            return arr[k];
        }
    }
}

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

 

posted @ 2022-03-02 11:15  火星架构师  阅读(54)  评论(0)    收藏  举报