0
点赞
收藏
分享

微信扫一扫

快速排序-单向划分

新鲜小饼干 2022-02-25 阅读 77
c++
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;
}
举报

相关推荐

0 条评论