快速排序概念及实现

快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,

其基本思想为:

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

将区间按照基准值划分为左右两半部分的常见方式有:

1. hoare版本
2. 挖坑法
3. 前后指针版本

递归方式

如果当中元素个数多于一个,则进行快排
在这里插入图片描述
//从右侧位置开始选择
//给两个指针,一个放在最左边,一个放在最右边,左边找比key大的,找到停下,右边找小的,找到停下,然后把这两个进行交换
//两个相遇后,当前的位置元素,与最后元素交换,也就是与key交换

//begin从前往后找比基准值大的元素,找到停下
while (begin<end&&array[begin]<=key){ //比key小或者等于往后走,大停下来,找到大的,如果本身序列最大的数在最后一个,begin会越界,则必须保证begin<end

//end从后往前找比基准值小的元素,找到停下来
//找到小的
//如果两个不在同一个位置
//两个交换

//end和begin相遇,把他们当前指向的数与key进行交换
在这里插入图片描述

挖坑法
在这里插入图片描述
前后指针版本
基准值取数组最后一个元素
cur开始遍历数组,如果当前cur里的值小于基准值,pre往后走一步,两个在同一个位置,不再同一位置进行交换。如果cur的值大于基准值,cur一个人往前走。
在这里插入图片描述
最好场景:数据越随机,越乱越好O(n log2 n)
最差的场景:接近有序O(n*n)
三数取中法降低最差场景
在这里插入图片描述
之前的操作要做一些改动
在这里插入图片描述

递归转化成循环

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值