思路:
利用快速排序的划分思想 可以找出前k大数,然后不断划分 直到找到第K大元素
代码:
#include <iostream> #include <algorithm> #include <cstdio>5 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); else return findK(first+1, right, arr, k); } } int main() { int n; int arr[1000]; scanf("%d", &n); for(int i = 1; i <= n; i++) cin >>arr[i]; int k; cin >> k; int num = findK(1, n, arr, k); cout << num << endl; return 0; }