Advertisement
Guest User

Untitled

a guest
May 26th, 2015
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.54 KB | None | 0 0
  1. void merge(Tlist* l, Tlist* m)
  2. {
  3.     int auxval;
  4.     Tnode* currNode1;
  5.     Tnode* currNode2;
  6.     Tlist* auxlist = malloc(sizeof(Tlist));
  7.     list_init(auxlist);
  8.     currNode1 = l -> head;
  9.     currNode2 = m -> head;
  10.     while (currNode1 != NULL && currNode2 != NULL)
  11.     {
  12.         if (currNode1 -> value <= currNode2 -> value)
  13.         {
  14.             auxval = currNode1 -> value;
  15.             insert_tail(auxlist, auxval);
  16.             currNode1 = currNode1 -> next;
  17.         }
  18.         else
  19.         {
  20.             auxval = currNode2 -> value;
  21.             insert_tail(auxlist, auxval);
  22.             currNode2 = currNode2 -> next;
  23.         }
  24.     }
  25.     if (currNode1 == NULL)
  26.     {
  27.         while (currNode2 != NULL)
  28.         {
  29.             auxval = currNode2 -> value;
  30.             insert_tail(auxlist, auxval);
  31.             currNode2 = currNode2 -> next;
  32.         }
  33.     }
  34.     else
  35.         while (currNode1 != NULL)
  36.         {
  37.             auxval = currNode1 -> value;
  38.             insert_tail(auxlist, auxval);
  39.             currNode1 = currNode1 -> next;
  40.         }
  41.     l -> head = auxlist -> head;
  42.     l -> nElements = auxlist -> nElements;
  43. }
  44.  
  45. void merge_sort(Tlist* l)
  46. {
  47.     int size = size_list(l);
  48.     int index = 1;
  49.     if (size <= 1)
  50.         return;
  51.     Tlist* auxlist1 = malloc(sizeof(Tlist));
  52.     Tlist* auxlist2 = malloc(sizeof(Tlist));
  53.     list_init(auxlist1);
  54.     list_init(auxlist2);
  55.     auxlist1 -> head = l -> head;
  56.     Tnode* currNode;
  57.     currNode = l -> head;
  58.     while (index != size/2)
  59.     {
  60.         currNode = currNode -> next;
  61.         index ++;
  62.     }
  63.     auxlist2 -> head = currNode -> next;
  64.     currNode -> next = NULL;
  65.     auxlist1 -> nElements = size/2;
  66.     auxlist2 -> nElements = size - size/2;
  67.     merge_sort(auxlist1);
  68.     merge_sort(auxlist2);
  69.     merge(auxlist1, auxlist2);
  70.     l -> head = auxlist1 -> head;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement