void fix_list(node *head){
	node *first = head, *pre1=NULL,*pre2=NULL,*second=NULL;
	while (first)
	{
		if (first->next){
			if (first->data < first->next->data){
				pre1 = first;
				first = first->next;
			}
			else{
				second = first;
				node *temp = second;
				while (second->next != NULL){
					if (second->data>second->next->data){
						pre2 = second;
						second = second->next;
					}
					else{
						second = pre2;
						break;
					}
				}
				pre1->next = reverse(first, first, second->next, second->next);
				first = temp->next;
			}
		}
		else{
			break;
		}
	}
	mergeSplit(head);
	print(head);
}
void mergeSplit(node *head){
	node *cur = head;
	while (cur->next){
		if (cur->data < cur->next->data){
			cur = cur->next;
		}
		else{
			mergeSplit(cur->next);
			head=mergeSort(head,cur,cur->next);
		}
	}
}
Exemple #3
0
struct node *mergeSort(struct node *head)
{
  if (NULL == head || NULL == head->next)
  {
    return head;
  }

  struct node *sechead = mergeSplit(head);
  head = mergeSort(head);
  sechead = mergeSort(sechead);
  return merge(head, sechead);
}
Exemple #4
0
void mergeSort(pathList **root)
{
	pathList *head = *root;
	pathList *a;
	pathList *b;
	
	if ( (head == NULL) || (head->next == NULL) )
	{
		return;
	}
	
	mergeSplit(head, &a, &b);
	mergeSort(&a);
	mergeSort(&b);
	(*root) = sortedMerge(a, b);
}