思路:
利用快速排序的划分思想 可以找出前k大数,然后不断划分 直到找到第K大元素
代码:
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int findK(int left, int right, int arr[], int k) { if(left >= right) return arr[left]; int first = left, last = right; int key = arr[first]; while(first < last) { while(first < last && arr[last] >= key) last--; arr[first] = arr[last]; while(first < last && arr[first] <= key) first++; arr[last] = arr[first]; } arr[first] = key; if(first == k) return arr[k]; else { if(first > k) return findK(left, first, arr, k); , right, arr, k); } } int main() { int n; ]; scanf("%d", &n); ; i <= n; i++) cin >>arr[i]; int k; cin >> k; , n, arr, k); cout << num << endl; ; }