struct ListNode {
int val;
ListNode *next;
ListNode(int x = 0) : val(x), next(NULL) {}
};
void QuickSortCore(ListNode* pBegin, ListNode* pEnd);
ListNode* partition(ListNode* pBegin, ListNode* pEnd);
void QuickSort(ListNode* head)
{
if(head == NULL) return;
QuickSortCore(head,NULL);
}
//排序的范围是[pBegin,pEnd)
void QuickSortCore(ListNode* pBegin, ListNode* pEnd)
{
//递归基,[pBegin,pEnd)为空或只有一个节点
if(pBegin == pEnd || pBegin->next == pEnd) return;
ListNode* pPivot = partition(pBegin,pEnd);
QuickSortCore(pBegin, pPivot);
QuickSortCore(pPivot->next, pEnd);
}
void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
ListNode* partition(ListNode* pBegin, ListNode* pEnd)
{
ListNode* pPivot = pBegin;
ListNode* pCursor = pBegin->next;
//以pBegin作为支点来划分链表
for(; pCursor != pEnd; pCursor = pCursor->next)
{
if(pCursor->val > pBegin->val) continue;
else if(pCursor == pPivot->next) pPivot = pPivot->next;
else
{
pPivot = pPivot->next;
swap(pPivot->val, pCursor->val);
}
}
swap(pBegin->val,pPivot->val);
return pPivot;
}
链表的快速排序(递归,交换节点数据)
最新推荐文章于 2024-12-09 23:04:21 发布