Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <bits/stdc++.h>
  7. #include <math.h>
  8.  
  9. #include "quicksort.h"
  10.  
  11. using namespace std;
  12.  
  13. int findMedian(vector<int> &A, int p, int r) {
  14.  
  15. int m = (p+r)/2;
  16.  
  17. if (A[p] >= A[m]) {
  18. if (A[m] > A[r]) {
  19. return m;
  20. } else if (A[p] > A[r]) {
  21. return r;
  22. } else {
  23. return p;
  24. }
  25. } else {
  26. if (A[p] > A[r]) {
  27. return p;
  28. } else if (A[m] > A[r]) {
  29. return r;
  30. } else {
  31. return m;
  32. }
  33. }
  34. }
  35.  
  36. int partition(vector<int> &A, int p, int r) {
  37.  
  38. int m = findMedian(A, p, r);
  39. swap(A[m], A[r]);
  40.  
  41. int pivot = A[r];
  42. int i = (p-1);
  43.  
  44. for (int j = p; j <= r-1; j++) {
  45.  
  46. if (A[j] <= pivot) {
  47. i = i + 1;
  48. swap(A[i], A[j]);
  49. }
  50. }
  51. swap(A[i+1], A[r]);
  52. return i+1;
  53. }
  54.  
  55. void quicksort(vector<int> &A, int p, int r, int &count) {
  56. if (p < r) {
  57. count = count + (r - p);
  58. int q = partition(A, p, r);
  59.  
  60. quicksort(A, p, q - 1, count);
  61. quicksort(A, q + 1, r, count);
  62. }
  63. }
  64.  
  65. int main()
  66. {
  67.  
  68. vector<int> result;
  69.  
  70. int n, j;
  71. ifstream f("1.txt");
  72. f >> n;
  73.  
  74. for (int i = 0; i < n; i++) {
  75. f >> j;
  76. result.push_back(j);
  77. }
  78.  
  79. int count = 0;
  80. quicksort(result, 0, result.size()-1, count);
  81.  
  82. for (int i = 0; i < result.size(); i++) {
  83. cout << result[i] << " ";
  84. }
  85. cout << "\n";
  86. cout << count << "\n";
  87.  
  88. return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement