Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <climits>
  4. #include <math.h>
  5. #include <string>
  6. #include <cmath>
  7. using namespace std;
  8.  
  9. struct item
  10. {
  11.     int val;
  12.     item* next;
  13.  
  14. };
  15.  
  16. void AddItem(item **head, item **cur, int x)
  17. {
  18.     if (*head == NULL)
  19.     {
  20.         *head = new item;
  21.         (*head)->val = x;
  22.         (*head)->next = NULL;
  23.         *cur = *head;
  24.     }
  25.     else
  26.     {
  27.         (*cur)->next = new item;
  28.         *cur = (*cur)->next;
  29.         (*cur)->val = x;
  30.         (*cur)->next = NULL;
  31.     }
  32. }
  33.  
  34. item* Sliv(item* head1, item* head2)
  35. {
  36.     if (head1 != NULL && head2 != NULL)
  37.     {
  38.         item* p1 = new item;
  39.         p1 = head1;
  40.         item* p2 = new item;
  41.         p2 = head2;
  42.         item head;
  43.         item* headd = &head;
  44.         headd = NULL;
  45.         item* cor = new item;
  46.         cor = headd;
  47.         while (p1 != NULL || p2 != NULL)
  48.         {
  49.             if (p1 != NULL && p2 != NULL)
  50.             {
  51.                 if (p1->val >= p2->val)
  52.                 {
  53.                     if (headd == NULL)
  54.                     {
  55.                         headd = new item;
  56.                         headd->val = p2->val;
  57.                         headd->next = NULL;
  58.                         cor = headd;
  59.                         p2 = p2->next;
  60.                     }
  61.                     else
  62.                     {
  63.                         cor->next = new item;
  64.                         cor = cor->next;
  65.                         cor->next = NULL;
  66.                         cor->val = p2->val;
  67.                         p2 = p2->next;
  68.                     }
  69.                 }
  70.                 else
  71.                 {
  72.                     if (headd == NULL)
  73.                     {
  74.                         headd = new item;
  75.                         headd->val = p1->val;
  76.                         headd->next = NULL;
  77.                         cor = headd;
  78.                         p1 = p1->next;
  79.                     }
  80.                     else
  81.                     {
  82.                         cor->next = new item;
  83.                         cor = cor->next;
  84.                         cor->next = NULL;
  85.                         cor->val = p1->val;
  86.                         p1 = p1->next;
  87.                     }
  88.                 }
  89.             }
  90.             else if (p2 == NULL)
  91.             {
  92.                 cor->next = new item;
  93.                 cor = cor->next;
  94.                 cor->next = NULL;
  95.                 cor->val = p1->val;
  96.                 p1 = p1->next;
  97.             }
  98.             else
  99.             {
  100.                 cor->next = new item;
  101.                 cor = cor->next;
  102.                 cor->next = NULL;
  103.                 cor->val = p2->val;
  104.                 p2 = p2->next;
  105.             }
  106.         }
  107.         return headd;
  108.     }
  109.     else if (head1 != NULL)
  110.         return head1;
  111.     else if (head2 != NULL)
  112.         return head2;
  113.  
  114. }
  115.  
  116. item* mergesort(item **head, int c)
  117. {
  118.     item* hooks[32];
  119.     for (int i = 0; i < 32; i++)
  120.     {
  121.         hooks[i] = NULL;
  122.     }
  123.     item* cur = new item;
  124.     item* curr = new item;
  125.     cur = *head;
  126.     for (c; c > 0; c--)
  127.     {
  128.         curr = new item;
  129.         curr->val = cur->val;
  130.         curr->next = NULL;
  131.         int i = 0;
  132.         while (hooks[i] != NULL)
  133.         {
  134.             curr = Sliv(hooks[i], curr);
  135.             hooks[i] = NULL;
  136.             i++;
  137.         }
  138.         hooks[i] = curr;
  139.         cur = cur->next;
  140.     }
  141.     int i = 1;
  142.     for (i; i < 32; i++)
  143.     {
  144.         if (hooks[i-1]!=NULL || hooks[i]!=NULL)
  145.             hooks[i] = Sliv(hooks[i - 1], hooks[i]);
  146.     }
  147.     return hooks[31];
  148. }
  149.  
  150. int main()
  151. {
  152.     cin.tie(NULL);
  153.     freopen("input.txt", "r", stdin);
  154.     freopen("output.txt", "w", stdout);
  155.  
  156.     item* head = NULL;
  157.     item* cur = NULL;
  158.     int x;
  159.     int c = 0;
  160.     while (cin >> x)
  161.     {
  162.         AddItem(&head, &cur, x);
  163.         c++;
  164.     }
  165.     head = mergesort(&head, c);
  166.     cur = head;
  167.     while (cur != NULL)
  168.     {
  169.         cout << cur->val << " ";
  170.         cur = cur->next;
  171.     }
  172.  
  173.     return 0;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement