QuickSort简解(分治思想) By ACReaper

本文详细介绍了快速排序算法的主要思想和实现过程。通过递归的方式将数组分为两部分,并选择一个支点进行排序,确保左边的数据都比支点小,右边的数据都比支点大。文章还提供了具体的代码实现。

快排又称为快速排序算法

快熟排序主要思想为:递归而分,重于分而治,而简与合。


治:


int partition(int A[],int st,int ed){
     	
        int key = A[st];//把第一个元素作为支点
	int j = st;//j一直指向小于等于key一类的尾元素
	for(int i = st + 1; i <= ed;i++){//扫描剩下元素,实现分成两类,一类小于等于key,一类大于等于key
        	if(A[i] <= key){
			j++;
			int temp = A[j];
			A[j] = A[i];
			A[i] = temp;
		}
	}
	int temp = A[j];
	A[j] = A[st];
	A[st] = temp;
	return j;
}
分:
	如何分画一个递归树就一目明了,我们可以知道在递归树中,每一个结点,都要实行“治”。所以有
	void QuickSort(int A[],int st,int ed){
		if(st < ed){
			int mid = partition(A,st,ed);
			QuickSort(A,st,mid - 1);//两个方向分别搜素所有结点,完成所有治理,完成排序。
			QuickSort(A,mid + 1,ed);
		}
	}
By ACReaper
2013 03 23 




转载于:https://www.cnblogs.com/sixcoder/archive/2013/03/23/3825993.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值