Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void merge(Tlist* l, Tlist* m)
- {
- int auxval;
- Tnode* currNode1;
- Tnode* currNode2;
- Tlist* auxlist = malloc(sizeof(Tlist));
- list_init(auxlist);
- currNode1 = l -> head;
- currNode2 = m -> head;
- while (currNode1 != NULL && currNode2 != NULL)
- {
- if (currNode1 -> value <= currNode2 -> value)
- {
- auxval = currNode1 -> value;
- insert_tail(auxlist, auxval);
- currNode1 = currNode1 -> next;
- }
- else
- {
- auxval = currNode2 -> value;
- insert_tail(auxlist, auxval);
- currNode2 = currNode2 -> next;
- }
- }
- if (currNode1 == NULL)
- {
- while (currNode2 != NULL)
- {
- auxval = currNode2 -> value;
- insert_tail(auxlist, auxval);
- currNode2 = currNode2 -> next;
- }
- }
- else
- while (currNode1 != NULL)
- {
- auxval = currNode1 -> value;
- insert_tail(auxlist, auxval);
- currNode1 = currNode1 -> next;
- }
- l -> head = auxlist -> head;
- l -> nElements = auxlist -> nElements;
- }
- void merge_sort(Tlist* l)
- {
- int size = size_list(l);
- int index = 1;
- if (size <= 1)
- return;
- Tlist* auxlist1 = malloc(sizeof(Tlist));
- Tlist* auxlist2 = malloc(sizeof(Tlist));
- list_init(auxlist1);
- list_init(auxlist2);
- auxlist1 -> head = l -> head;
- Tnode* currNode;
- currNode = l -> head;
- while (index != size/2)
- {
- currNode = currNode -> next;
- index ++;
- }
- auxlist2 -> head = currNode -> next;
- currNode -> next = NULL;
- auxlist1 -> nElements = size/2;
- auxlist2 -> nElements = size - size/2;
- merge_sort(auxlist1);
- merge_sort(auxlist2);
- merge(auxlist1, auxlist2);
- l -> head = auxlist1 -> head;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement