数据结构之快速排序(重点)

快速排序

在这里插入图片描述
算法所需
一个基准点
左边是比其小的数,右边是比其大的数
在这里插入图片描述
先使所指的元素作为基准元素low
用一个piviot存储49
然后进行比遍历操作
就是high向左移动(high–),到第一个比piviot小的元素进行一个data[low]=data[high]
然后进行low++,找到第一个大于等于 piviot的赋值给data[high]即可

在这里插入图片描述
就这样循环
最后low=high时
正好把piviot存入,左边比它小右边大于等于它

在这里插入图片描述
接下来我们管左子表和右子表即可
在这里插入图片描述

在这里插入图片描述
右子表

在这里插入图片描述
在这里插入图片描述
这样再划分为两个子表,由于右边只有一个元素不用再次比较了
看左字表即可
在这里插入图片描述
然后排序完毕
就是划分呗

代码实现

递归算法比较复杂
在这里插入图片描述
需要使用栈(系统的),先入后出
首先第一个函数的话
是先对数组做一个整的划分(0-7)
最后pivot=3
在这里插入图片描述
方便划分出来左右子表
然后对左子表进行递归划分
然后还是
先对0到2
划分
最后左边一个元素右边一个元素再进行
这个两个子表已经是排好了其实,下一次还是出来左子表是吧
处理13一个元素呗,high=pivot-1=0,low=0
然后还是low做pivot呗
然后high对应的等于low
high-1不符合条件弹出栈
low还是在那个位置赋值还是那个位置呗,就是没变
右子表就是low=pivot+1=2,high=2
和上面左子表相同呗
在这里插入图片描述
第一个入栈(整体的左子表排序完了)
右子表和做字表类似
不说了

算法效率分析

时间复杂度主要在Partition函数呗
这个函数主要做的不就是high和low双向扫描对比
是查找n个元素
在这里插入图片描述
最后递归时间复杂度
还要与递归层数有关!
在这里插入图片描述

在这里插入图片描述
二叉树的层数其实就是对应的递归次数
在这里插入图片描述

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值