排序算法之快速排序的多种版本

本文介绍了快速排序算法,包括其时间复杂度优势和主要思想——通过一趟排序将记录分割成两部分,并对这两部分递归地进行排序。文中详细阐述了三种不同的单趟排序方法:左右指针法、挖坑法和前后指针法,并探讨了快速排序的优化策略,如三数取中和根据元素个数选择排序方式。
摘要由CSDN通过智能技术生成

快速排序

    快速排序相对于其他的排序算法是较为快速的一种排序算法,主要体现在它的时间复杂度上.它的主要思想是:先选取一个值做关键字,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录均比关键字小,另一部分记录均比关键字大,则可分别对这两部分记录继续进行排序,以达到整个有序的目的.

    因此快速排序中最重要的就是划分区间,在下文的实现中我将介绍三种类型的单趟排序.

 一.左右指针法

    先找到一个值做关键字(可以选择最后一个元素也可以选择第一个元素),在我的代码实现中我选取的是最后一个元素做关键字,从左边开始找比关键字大的元素,从右边开始找比关键字小的元素,将左右找到满足题意的值交换,当左右相遇时说明一趟排序已经结束,此时需要将相遇点与关键字交换.

   

int PastSortA(int *a,int start,int end)
{
	int left=start;
	int right=end;
	int ret=GetMid(a,start,end);
	swap(a[ret],a[end]);
	int pivotkey=a[end];    //最后一个做关键字
	while (left < right)
	{
		//left找比pivot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值