void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int LeftParition(int* br, int left, int right)
{
int i = left - 1, j = left;
int tmp = br[j];
while (j <= right)
{
if (br[j] <= tmp)
{
++i;
swap(&br[j], &br[i]);
}
++j;
}
swap(&br[left], &br[i]);
return i;
}
void PassQuick(int* br, int left, int right)
{
if (left < right)
{
int pos = LeftParition(br, left, right);
PassQuick(br, left, pos);
PassQuick(br, pos + 1, right);
}
}
void QuickSort(int* br, int n)
{
if (br == NULL || n < 2)return;
PassQuick(br, 0, n - 1);
}
链表快排-单向划分
ListNode* LeftParition(ListNode* head, ListNode* end)
{
ListNode* p = head;
ListNode* q = head->next;
int tmp = p->val;
while (q != end)
{
if (q->val <= tmp)
{
p = p->next;
swap(p->val, q->val);
}
q = q->next;
}
swap(head->next->val, q->val);
//ListQuickParition(left, p);
//ListQuickParition(p, right);
return p;
}