分治策略-快速排序

分治策略通过将大问题分解为小问题解决,适用于规模较小时能轻易解决且子问题相互独立的情况。快速排序是其典型应用,通过选取基准元素进行划分,将小于基准的元素放在左侧,大于基准的在右侧,再对两部分递归进行排序,最终得到有序序列。本文介绍了快速排序的划分函数及递归和循环调用的方法。
摘要由CSDN通过智能技术生成

分治策略是将规模较大的问题分解成规模小的问题,问题不变,规模变小。导致了递归过程的产生。

分治策略能解决问题的特征:

1 该问题的规模缩小到一定程度可以很容易解决

2 该问题可以分解为若干个规模较小的相同问题

3 使用小的规模解 ,可以合并为原规模的解

4 该问题分解的各个子规模是相互独立的。

以下两个例子

第一个是查找数组中的元素并返回下标

int Find(const int* br, int n, int val)
{
	if (n <= 0 || br[n - 1] == val)
	{
		return n - 1;
	}
	else
	{
		return Find(br, n - 1, val);
	}
}
int FindPos(const int* br, int n, int val)
{
	if (br == NULL || n < 1) return -1;
	return Find(br, n, val);
}

第二个是打印一个数组

void Print(const int* br, int &n)
{
	if (n > 0)
	{
		Print(br, --n);
		cout << br[n] << " ";
	}
}
void Print_Ar(const int* br, int n)
{
	if (br == NULL || n < 1) return;
	Print(br, n);
	cout << endl;
}

快速排序也是对分治策略的应用

下面是快排里的划分函数

思想是在待排序列选第一个数作为比较的数 ,让这个待排序列所有小于它的数都在左边,让所有小于它的数都在右边 , 然

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值