算法储备之快速排序


快速排序的非递归(利用栈):

int Sort(int * pArr, int low, int high)
{
	int left = low;
	int right = high;
	int key = pArr[low];

	while (left < right)
	{
		while (left < right && pArr[right] >= key)
			right--;
		if (left < right)
			pArr[left++] = pArr[right];
		else break;

		while (left < right && pArr[left] < key)
			left++;
		if (left < right)
			pArr[right--] = pArr[left];
		else break;
	}
	pArr[left] = key;
	return left;
}

void QuickSort(int * pArr, int low, int high)
{
	using std::stack;
	int mid, left, right;
	stack<int> rangeStack;

	if (low < high)
		mid = Sort(pArr, low, high);
	if (low < mid - 1)
	{
		rangeStack.push(low);
		rangeStack.push(mid - 1);
	}
	if (mid + 1 < high)
	{
		rangeStack.push(mid + 1);
		rangeStack.push(high);
	}
	while (!rangeStack.empty())
	{
		right = rangeStack.top();
		rangeStack.pop();
		left = rangeStack.top();
		rangeStack.pop();

		mid = Sort(pArr, left, right);
		if (left < mid - 1)
		{
			rangeStack.push(left);
			rangeStack.push(mid - 1);
		}
		if (mid + 1 < high)
		{
			rangeStack.push(mid + 1);
			rangeStack.push(right);
		}
	}
}


快速排序递归函数:
void QuickSort(int * pArr, int low, int high)
{
	if (low < high)
	{
		int left = low;
		int right = high;
		int key = pArr[low];

		while (left < right)
		{
			while (left < right && pArr[right] >= key)
				right--;
			if (left < right)
				pArr[left++] = pArr[right];
			else break;

			while (left < right && pArr[left] < key)
				left++;
			if (left < right)
				pArr[right--] = pArr[left];
			else break;
		}
		pArr[left] = key;
		QuickSort(pArr, low, left - 1);
		QuickSort(pArr, left + 1, high);
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值