Advertisement
Dzham

Untitled

Mar 11th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using iter = std::vector<int>::iterator;
  6.  
  7. int middle(int a, int b, int c) {
  8. if (b >= a && a >= c || c >= a && a >= b) {
  9. return a;
  10. }
  11. if (a >= b && b >= c || c >= b && b >= a) {
  12. return b;
  13. }
  14. if (a >= c && c >= b || b >= c && c >= a) {
  15. return c;
  16. }
  17. }
  18.  
  19. iter partition2(iter begin, iter end, double predicut) {
  20. while (begin != end) {
  21. while (predicut >= *begin) {
  22. ++begin;
  23. if (begin == end) {
  24. return begin;
  25. }
  26. }
  27. do {
  28. --end;
  29. if (begin == end) {
  30. return begin;
  31. }
  32. } while (predicut <= *end);
  33. std::swap(*begin, *end);
  34. ++begin;
  35. }
  36. return begin;
  37. }
  38.  
  39. void quicksort2(iter begin, iter end) {
  40. if (begin + 1 != end && begin != end) {
  41. std::cout << *(begin + (end - begin) / 2) << " " << *(begin) << " " << *(end - 1) << '\n';
  42. std::cout << middle(*(begin + (end - begin) / 2), *(begin), *(end - 1)) << '\n';
  43. iter end3 = partition2(begin, end,
  44. middle(*(begin + (end - begin) / 2), *(begin), *(end - 1)));
  45. std::cout << *end3 << '\n';
  46. quicksort2(begin, end3);
  47. quicksort2(end3, end);
  48. }
  49. }
  50.  
  51. int main() {
  52. int a, b, pr;
  53. std::vector<int> v;
  54. std::cin >> a;
  55. if (a != 0) {
  56. for (int i = 0; i < a; i++) {
  57. std::cin >> b;
  58. v.push_back(b);
  59. }
  60. quicksort2(v.begin(), v.end());
  61. int i = 0;
  62. for (; i < a - 1; i++) {
  63. std::cout << v[i] << " ";
  64. }
  65. std::cout << v[i];
  66. }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement