交换排序之快速排序

上一篇文章讲述了交换排序的一种,冒泡排序http://blog.csdn.net/majianfei1023/article/details/7289177,现在讲一讲选择排序的另外一种算法,快速排序

1.基本思想

假设要排序的数组是Array[0]……Array[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是: 
1)、设置两个变量i、j,排序开始的时候i = 0,j = n-1; 
2)以第一个数组元素作为关键数据,赋值给_temp,即_temp = Array[i]; 
3)、从j开始向前搜索,即由后开始向前搜索(j=j-1),找到第一个小于_temp的值,两者交换; 
4)、从i开始向后搜索,即由前开始向后搜索(i = i+1),找到第一个大于_temp的值,两者交换; 
5)、重复第3、4步,直到i=j; 


2.算法

1.一次划分算法具体如下:

int QuickSort(Type *Array, int low ,int high)
{
	//int m_i;//local variable to store the value of i
	Type _tmp;
	int i = low;int j = high;
	_tmp = Array[i];
	while (i!=j)
	{
		while((Array[j] > _tmp) && (j>i))j--;
		if (i<j)
		{
			Array[i] = Array[j];
			i++;
		}
		while((Array[i] < _tmp) && (i<j))i++;
		if (i<j)
		{
			Array[j] = Array[i];
			j--;
		}
	}
	Array[i] = _tmp;
	return i;
}
2.快速排序如下:

template<class Type>
void QSort(Type *Array,int low ,int high)
{
	if (low < high)
	{
	
	int temp = QuickSort(Array,low,high);
	QSort(Array,low,temp-1);
	QSort(Array,temp+1,high);
	}
}
算法分析

快速排序的记录移动次数不大于比较的次数,快速排序的最坏时间复杂度应为O(n*n),最好时间复杂度为O(nlogn);快速排序是一种不稳定的排序方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值