数据结构笔记--排序(4)

五.快速排序

快速排序是对冒泡排序算法的改进,核心思想就是通过一趟排序把待排序序列分成两部分,一部分比关键字(枢轴)大,一部分比关键字小,重复以上过程,直到排序完成

看看具体怎么做
int a[] ={49 ,38 ,65 ,97 ,76 ,13 ,27 ,49}

  • 以待排序序列的第一个元素49为关键字 第一趟:27 38 13 49 76 97 65 49
  • 以待排序序列的第一个元素27 76为关键字第二趟:13 27 38 49 49 65 76 97

稍微详细一点的思路
第一趟排序

定义两个指针,一个叫low ,一个叫high

low high
49 38 65 97 76 13 27 49 选择关键字49,<一般选择待排序序列第一个元素为关键字>
在这里插入图片描述
a[high]=97>49 high-=1 a[high]=76>49

high-=1 a[high]=49 并且 low==high

我们发现,此时序列已经被分成两个部分,一边比49小,一边比49大。
至此,第一趟排序已经完成
第二趟排序与第一趟排序步骤相同,这里不再重复

下面看看代码实现

int partition(ElementType a[],int low,int high)
{
	int key = a[low];//关键字 
	while(low<high){
		while(low<high && a[high]>=key) --high;//在序列中找一个比关键字小的数 
		a[low] = a[high];
		while(low<high && a[low]<=key) low++;//在序列中找一个比关键字大的数 
		a[high] = a[low];
		if(low>=high) break;
	}
	a[low] = key;//插入关键字 
	return low;
}

void qSort(ElementType a[],int s,int r)//快速排序
{
	if(s<r){//若低位小于高位 
		int q = partition(a,s,r);//将待排序序列分成两个序列,得到关键字的位置 
		qSort(a,s,q);//对关键字左边的序列排序 
		qSort(a,q+1,r);//对关键字右边的序列排序 
	}
}

分析
快速排序的平均时间为knln(n) ,并且快速排序目前被认为是最好的一种内部排序方法

时间复杂度为O(n*ln(n))

T(N) = T(N)如果初始序列为基本有序时,快速排序将退化为冒泡排序,时间复杂度为O(N^2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值