常用排序算法简述之一:快速排序法

        快速排序是对冒泡排序法的改进,分而治之,大规模递归的算法。快速排序比大部分排序算法都要快。尽管我们可以在某些特殊的情况下写出比快速排序快的算法,但是就通常情况而言,没有比它更快的了。快速排序是递归的,对于内存非常有限的机器来说,它不是一个好的选择。

其基本思想是:从数组挑选一个关键数(任意一个数都可以),将其他大于这个数的的数放到它的右边(对于从小到大排序),小的放到左边。这样数组被分成左右两个子数组。然后分别对子数组执行上述操作。一直重复,直到不能再分。

快速排序步骤为: 

1)排序开始的时候:i=0(数组起始位置),j=N-1(数组结束位置);

2)以第一个数组元素作为关键数据,key=A[0]

3)从j开始向前搜索,即由后开始向前搜索(j -- ),找到第一个小于key的值A[j],A[i]与A[j]交换;

4)从i开始向后搜索,即由前开始向后搜索(i ++ ),找到第一个大于key的A[i],A[i]与A[j]交换;

5)重复第3、4、5步,直到 i=j;

6)对子数组重复上述步骤(递归)。

代码:

#include<iostream>
using namespace std;

int Partition(int data[],int i,int j)
{
	int key = data[i];
	while (i<j)
	{
		while (i<j&&data[j]>=key) j--;
		if (i<j)
		{
			data[i]=data[j];
			data[j]=key;
		}
		while (i<j&&data[i]<key) i++;
		if (i<j)
		{
			data[j]=data[i];
			data[i]=key;
		}
	}
	return i;
}

void QuickSort(int data[],int i,int j)
{
	if (i<j)
	{
		int k = Partition(data,i,j);
		QuickSort(data,i,k-1); 
		QuickSort(data,k+1,j); 
	}
}


int main()
{
	int num[]={2,1,34,6,8,5,3,6,8,0,5,5,35,3,567,74,98};
	for(int i=0;i<17;i++)
		cout<<num[i]<<' ';
	QuickSort(num,0,16);
	cout<<endl;
	for(int i=0;i<17;i++)
		cout<<num[i]<<' ';

	return 0;
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值