冒泡排序
struct ListNode{
int val;
ListNode * next;
}
ListNode * sort(ListNode * head)
{
ListNode *p1,*p2;
for(int i = 0; i < head->val - 1; i++)
{
p1 = head->next;
p2 = p1->next;
for(int j = 0; j < head->val - 1 - i; j++)
{
if(p1->val > p2->val)
{
int temp = p1->val;
p1->val = p2->val;
p2->val = temp;
}
p1 = p1->next;
p2 = p2->next;
}
}
return head;
}
二路归并排序
struct ListNode{
int val;
ListNode *next;
}
ListNode * sort(ListNode *head)
{
if(head == NULL || head->next == NULL)
return head;
ListNode *slow = head,*fast = head->next;
while(fast != NULL || fast->next != NULL)
{
slow = slow->next;
fast = fast->next->next;
}
ListNode *mid = slow->next;
slow->next = NULL;
ListNode *leftHead = sort(head);
ListNode *rightHead = sort(mid);
return merage(leftHead,rightHead);
}
ListNode *merage(ListNode* p1,ListNode *p2)
{
ListNode * head, * p;
if(p1->val > p2->val)
{
head = p2;
p2 = p2->next;
}
else{
head = p1;
p1 = p1->next;
}
p = head;
while(p1 != NULL || p2 != NULL)
{
if(p1->val > p2->val)
{
p->next = p2;
p2 = p2->next;
}
else
{
p->next = p1;
p1 = p1->next;
}
p = p->next;
}
if(p1 != NULL)
p->next = p1;
if(p2 != NULL)
p->next = p2;
return head;
}