数据结构——快排的三种实现方式

把快排的三种不同的实现方式进行总结注意每种不同的优势,坑位好理解,hore最经典,双指针代码最少
摘要由CSDN通过智能技术生成

坚持看完,结尾有思维导图总结

什么是快排?

首先按照官方定义:
任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。

按照官方的定义我们看不出来什么
但是如果我们用图示的方式演示一下就能够明白
假设有一个序列 :
572136,通过单趟排序,每个数组的第一个能够找到对应的位置,同时保证这个数的左边都是比他小的数,右边都是比他大的数

在这里插入图片描述
排序后 ,5 的左边都是比5小的数,5的右边都是比5大的数
然后以五位分界线,将数组分为左数组和右数组,执行相同的排序
在这里插入图片描述
黑色的是分段
红色的是分段后回到原数组

如何实现递归

递归有两个要素,得到最后数据的位置
按照最后数据的位置切分数组

void QuickSort(int* a ,int begin,int end)
{
   
	if(end - begin +1 <= 1)//只有一个元素的时候退出
		return;
	int k = PartSort(a,begin,end);
	QuickSort(a,begin,k-1);
	QuickSort(a,k+1,end);
}

单次的排序要如何实现

一共有三种方式实现

hore 的办法在这里插入图片描述

有一个要验证的问题,如何保证最后相遇的地方保证比数据小呢?
一共有两种相遇方式,要么是 begin 遇到 end ,要么是end 遇到degin
当 begin 遇到 end 的时候,end 本身是比 key 小的值,所以保证了 遇到的数字比 key 小
当 end 遇到begin ,因为保证了 end 先走,end 行动前, begin 和 end 已经互换,begin 底下就是比 key 小的数,也能保障 相遇的值比 key 小

具体程序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值