Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.80 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. void _5_sort(vector <short int> &a, int l, int r) {
  6.     if (a[l] > a[l + 1])
  7.         swap(a[l], a[l + 1]);
  8.  
  9.     if (a[l + 2] > a[r - 1])
  10.         swap(a[l + 2], a[r - 1]);
  11.  
  12.     if (a[l] > a[l + 2]) {
  13.         swap(a[l + 2], a[l]);
  14.         swap(a[l + 2], a[l + 1]);
  15.     }
  16.     else {
  17.         swap(a[l + 2], a[l + 1]);
  18.         swap(a[l + 2], a[r - 1]);
  19.     }
  20.  
  21.     if (a[r] > a[l + 1]) {
  22.         swap(a[r], a[r - 1]);
  23.         if (a[r] < a[l + 2])
  24.             swap(a[r - 1], a[l + 2]);
  25.     }
  26.     else {
  27.         if (a[r] < a[l])
  28.             swap(a[r], a[l]);
  29.         swap(a[r], a[l + 1]);
  30.         swap(a[r], a[l + 2]);
  31.         swap(a[r], a[r - 1]);
  32.     }
  33.  
  34.     if (a[r] < a[l + 2]) {
  35.         if (a[r] < a[l + 1])
  36.             swap(a[r], a[l + 1]);
  37.         swap(a[r], a[l + 2]);
  38.         swap(a[r], a[r - 1]);
  39.     }
  40.     else if (a[r] < a[r - 1])
  41.         swap(a[r], a[r - 1]);
  42. }
  43.  
  44. void _4_sort(vector <short int> &a, int l, int r) {
  45.     if (a[l] > a[l + 1])
  46.         swap(a[l], a[l + 1]);
  47.     if (a[r - 1] > a[r])
  48.         swap(a[r - 1], a[r]);
  49.     if (a[r - 1] < a[l])
  50.         swap(a[r - 1], a[l]);
  51.     if (a[l + 1] > a[r])
  52.         swap(a[l + 1], a[r]);
  53.     if (a[l + 1] > a[r - 1])
  54.         swap(a[l + 1], a[r - 1]);
  55. }
  56.  
  57. void _3_sort(vector <short int> &a, int l, int r) {
  58.     if (a[l] > a[l + 1])
  59.         swap(a[l], a[l + 1]);
  60.     if (a[l + 1] > a[r])
  61.         swap(a[l + 1], a[r]);
  62.     if (a[l] > a[l + 1])
  63.         swap(a[l], a[l + 1]);
  64. }
  65.  
  66. void _2_sort(vector <short int> &a, int l, int r) {
  67.     if (a[l] > a[r])
  68.         swap(a[l], a[r]);
  69. }
  70.  
  71. int partition(vector <short int> &a, int l, int r) {
  72.     int v = a[(l + r) / 2];
  73.  
  74.     int i = l , j = r;
  75.     while (i <= j) {
  76.         while (a[i] < v)
  77.             ++i;
  78.         while (a[j] > v)
  79.             --j;
  80.  
  81.         if (i >= j)
  82.             break;
  83.         swap(a[i++], a[j--]);
  84.     }
  85.     return j;
  86. }
  87.  
  88. void my_sort(vector <short int> &a, int l, int r) {
  89.     if (l >= r)
  90.         return;
  91.     else if (abs(l - r) == 4)
  92.         _5_sort(a, l, r);
  93.     else if (abs(l - r) == 3)
  94.         _4_sort(a, l, r);
  95.     else if (abs(l - r) == 2)
  96.         _3_sort(a, l, r);
  97.     else if (abs(l - r) == 1)
  98.         _2_sort(a, l, r);
  99.  
  100.     int m = partition(a, l, r);
  101.     my_sort(a, l, m);
  102.     my_sort(a, m + 1, r);
  103. }
  104.  
  105. int main() {
  106.     freopen("33554432short_ints.txt", "r", stdin);
  107.     freopen("output.txt", "w", stdout);
  108.  
  109.     int n;
  110.     cin >> n;
  111.     vector <short int> a(n);
  112.     for (auto &i : a)
  113.         cin >> i;
  114.  
  115.     vector <short int> b = a;
  116.  
  117.     int start = clock();
  118.     my_sort(a, 0, n - 1);
  119.     cout << clock() - start << '\n';
  120.     start = clock();
  121.     sort(b.begin(), b.end());
  122.     cout << clock() - start << '\n';
  123.  
  124.     for (auto i : a)
  125.         cout << i << ' ';
  126.  
  127.     return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement