Sort List
2015-04-18 22:32 iun 阅读(151) 评论(0) 收藏 举报Sort a linked list in O(n log n) time using constant space complexity.
快排,关键在于优化划分函数,即划分之后,元素的值为key的元素都放到中间,否则不能通过{1,3,3,1,3,1,3,3,2,3,2。。。。}该数据。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* partition_z(ListNode *p,ListNode *q,ListNode *& r){ int k=p->val; ListNode* s=p; for(ListNode* t=p->next;t!=q;t=t->next){ if(t->val<k){ s=s->next; swap(s->val,t->val); } } swap(s->val,p->val); ListNode* x=s; p=s; for(ListNode* t=p->next;t!=q;t=t->next){ if(t->val<=k){ s=s->next; swap(s->val,t->val); } } r=s; return x; } void sort_z(ListNode *p,ListNode *q){ if(p==q)return; int len=0; for(ListNode *t=p;t!=q;t=t->next)len++; int k=rand()%len; ListNode *t=p; for(int i=0;i<k;i++,t=t->next); swap(p->val,t->val); ListNode *r=partition_z(p,q,t); sort_z(p,r); sort_z(t->next,q); } ListNode *sortList(ListNode *head) { sort_z(head,NULL); return head; } };
浙公网安备 33010602011771号