如题: 一个比较简短的 单链表 快速排序算法
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
void exch(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
void QuickSortList(ListNode *head, ListNode *last)
{
if (head == NULL || head == last)
return;
ListNode *slow = head;
ListNode *fast = head->next;
while (fast != last) { //最后一个节点last不比较,或者为上一次的分割节点 或者为 NULL
if (fast->val < head->val) {
slow = slow->next;
exch(&slow->val, &fast->val);
}
fast = fast->next;
}
exch(&head->val, &slow->val);
QuickSortList(head, slow);
QuickSortList(slow->next, last); //slow->next 至多和 last 相等, 不会到last之后
}
ListNode *sortList(ListNode *head) {
QuickSortList(head, NULL);
return head;
}