Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <climits>
- #include <math.h>
- #include <string>
- #include <cmath>
- using namespace std;
- struct item
- {
- int val;
- item* next;
- };
- void AddItem(item **head, item **cur, int x)
- {
- if (*head == NULL)
- {
- *head = new item;
- (*head)->val = x;
- (*head)->next = NULL;
- *cur = *head;
- }
- else
- {
- (*cur)->next = new item;
- *cur = (*cur)->next;
- (*cur)->val = x;
- (*cur)->next = NULL;
- }
- }
- item* Sliv(item* head1, item* head2)
- {
- if (head1 != NULL && head2 != NULL)
- {
- item* p1 = new item;
- p1 = head1;
- item* p2 = new item;
- p2 = head2;
- item head;
- item* headd = &head;
- headd = NULL;
- item* cor = new item;
- cor = headd;
- while (p1 != NULL || p2 != NULL)
- {
- if (p1 != NULL && p2 != NULL)
- {
- if (p1->val >= p2->val)
- {
- if (headd == NULL)
- {
- headd = new item;
- headd->val = p2->val;
- headd->next = NULL;
- cor = headd;
- p2 = p2->next;
- }
- else
- {
- cor->next = new item;
- cor = cor->next;
- cor->next = NULL;
- cor->val = p2->val;
- p2 = p2->next;
- }
- }
- else
- {
- if (headd == NULL)
- {
- headd = new item;
- headd->val = p1->val;
- headd->next = NULL;
- cor = headd;
- p1 = p1->next;
- }
- else
- {
- cor->next = new item;
- cor = cor->next;
- cor->next = NULL;
- cor->val = p1->val;
- p1 = p1->next;
- }
- }
- }
- else if (p2 == NULL)
- {
- cor->next = new item;
- cor = cor->next;
- cor->next = NULL;
- cor->val = p1->val;
- p1 = p1->next;
- }
- else
- {
- cor->next = new item;
- cor = cor->next;
- cor->next = NULL;
- cor->val = p2->val;
- p2 = p2->next;
- }
- }
- return headd;
- }
- else if (head1 != NULL)
- return head1;
- else if (head2 != NULL)
- return head2;
- }
- item* mergesort(item **head, int c)
- {
- item* hooks[32];
- for (int i = 0; i < 32; i++)
- {
- hooks[i] = NULL;
- }
- item* cur = new item;
- item* curr = new item;
- cur = *head;
- for (c; c > 0; c--)
- {
- curr = new item;
- curr->val = cur->val;
- curr->next = NULL;
- int i = 0;
- while (hooks[i] != NULL)
- {
- curr = Sliv(hooks[i], curr);
- hooks[i] = NULL;
- i++;
- }
- hooks[i] = curr;
- cur = cur->next;
- }
- int i = 1;
- for (i; i < 32; i++)
- {
- if (hooks[i-1]!=NULL || hooks[i]!=NULL)
- hooks[i] = Sliv(hooks[i - 1], hooks[i]);
- }
- return hooks[31];
- }
- int main()
- {
- cin.tie(NULL);
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- item* head = NULL;
- item* cur = NULL;
- int x;
- int c = 0;
- while (cin >> x)
- {
- AddItem(&head, &cur, x);
- c++;
- }
- head = mergesort(&head, c);
- cur = head;
- while (cur != NULL)
- {
- cout << cur->val << " ";
- cur = cur->next;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement