Advertisement
RobertDeMilo

mergesort nov

Dec 8th, 2023
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. Node* findMin(Node*& head)
  2.     {
  3.         Node* slow = head;
  4.         Node* fast = head->next_node;
  5.  
  6.         while (fast != nullptr && fast->next_node != nullptr)
  7.         {
  8.             slow = slow->next_node;
  9.             fast = fast->next_node;
  10.         }
  11.         return slow;
  12.     }
  13.     Node* merge(Node* left, Node* right)
  14.     {
  15.         if (left == nullptr)
  16.         {
  17.             return right;
  18.         }
  19.         if (right == nullptr)
  20.         {
  21.             return left;
  22.         }
  23.         Node* ans = new Node(-1,nullptr);
  24.         Node* temp = ans;
  25.  
  26.         while (left != nullptr && right != nullptr)
  27.         {
  28.             if (left->value < right->value)
  29.             {
  30.                 temp->next_node = left;
  31.                 temp = left;
  32.                 left = left->next_node;
  33.             }
  34.             else
  35.             {
  36.                 temp->next_node = right;
  37.                 temp = right;
  38.                 right = right->next_node;  
  39.             }
  40.         }
  41.         while (left != nullptr)
  42.         {
  43.             temp->next_node = left;
  44.             temp = left;
  45.             left = left->next_node;
  46.         }
  47.         while (right != nullptr)
  48.         {
  49.             temp->next_node = right;
  50.             temp = right;
  51.             right = right->next_node;  
  52.         }
  53.         ans = ans->next_node;
  54.  
  55.         return ans;
  56.     }
  57.  
  58.  
  59.     Node* mergesort(Node*& head)
  60.     {
  61.         if (head == nullptr || head->next_node == nullptr)
  62.         {
  63.             return head;
  64.         }
  65.         Node* mid = findMin(head);
  66.         Node* left = head;
  67.         Node* right = mid->next_node;
  68.         mid->next_node = nullptr;
  69.  
  70.         left = mergesort(left);
  71.         right = mergesort(right);
  72.  
  73.         Node* result = merge(left, right);
  74.  
  75.         return result;
  76.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement