introduction to algorithms sorting lesson_4 quick sorting

快速排序是众多排序中平均性能最好最快的排序算法

其基本思想是:通过一次排序,将数据记录分割成两部分,一部分小于某个关键值,即枢轴,另一部分大于枢轴。

然后在分别对两部分又进行快速排序,即用递归方式进行,一般枢轴取第一个数据

先来看分割数据部分代码,返回枢轴位置

/**********quick sorting  algorithm**************/
int  parting(int data[],int left,int right)
{
	int low=left;
	int high=right;
	int pivotkey=data[low];
	
	while (low<high)
	{
		while(low<high&&data[high]>=pivotkey)
			high--;//找到右边第一个小的数据然后交换
		data[low]=data[high];

		while(low<high&&data[low]<=pivotkey)
			low++;//找到左边第一个大的数据然后交换
		data[high]=data[low];
	}
	data[low]=pivotkey;//记录枢轴数据
	return low; //返回枢轴位置
}
然后就可以运用递归的方法实现排序:

void quikcsort(int data[],int left,int right)
{
	if (left<right)
	{
		int pivotloc=parting(data,left,right);//一分为二
		quikcsort(data,left,pivotloc-1);//排左边
		quikcsort(data,pivotloc+1,right);//排右边
	}
}

测试:

#define getArraySize(arrayName) (sizeof(arrayName)/sizeof(arrayName[0]))

int _tmain(int argc, _TCHAR* argv[])
{
	int data_test[10]={1,0,2,9,3,1,5,8,9,10};
	quikcsort(data_test,0,getArraySize(data_test)-1);//getArraySize 获取数组长度函数
	prtarray(data_test,getArraySize(data_test));//打印数组
	system("pause");
	return 0;
}
分析:

      快速排序的时间复杂度为O(knlogn),其中k值在众多排序方法中,快速排序平均性能最好,即k最小

      可以对比归并排序算法,其思路与快速排序类似 参考lesson 2 merge sorting


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值