Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int partition(int * a, int l, int r) {
  5. int v = a[(l + r) / 2];
  6. int i = l;
  7. int j = r;
  8. while (i <= j) {
  9. while (a[i] < v)
  10. i++;
  11. while (a[j] > v)
  12. j--;
  13.  
  14. if (i >= j)
  15. break;
  16. swap(a[i++], a[j--]);
  17. }
  18. return j;
  19. }
  20.  
  21. int findOrderStatistic(int* array, int k, int n) {
  22. int left = 0, right = n - 1;
  23. while (true) {
  24. int mid = partition(array, left, right);
  25. if (mid == k) {
  26. return array[mid];
  27. }
  28. else if (k < mid) {
  29. right = mid;
  30. }
  31. else {
  32. left = mid + 1;
  33. }
  34. }
  35. }
  36.  
  37.  
  38. int main() {
  39. int n, k;
  40. cin >> n;
  41. int* a = new int[n];
  42. for (int i = 0; i < n; ++i) {
  43. cin >> a[i];
  44. }
  45. for (int i = 0; i < n; ++i) {
  46. cout << a[i] << ' ';
  47. }
  48. cout << endl;
  49. for (int k = 0; k < 3; ++k) {
  50. int m;
  51. cin >> m;
  52. cout << findOrderStatistic(a, m, n);
  53. }
  54.  
  55. return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement