经典算法之快排
1|0快排的复杂度
2|0快排逻辑
快速排序算法通过多次比较和交换来实现排序,其排序流程如下:
- 首先设定一个分界值(基准值),通过该分界值将数组分成左右两部分。
- 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。
- 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
- 重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
3|0代码实现
4|0排序演示
假设一开始序列{xi}是:5,3,7,6,4,1,0,2,9,10,8。
- 选择5(下标为0)为基准值,index下标从1开始,i为1,第一次循环 则为 5,3,7,6,4,1,0,2,9,10,8。
- index下标为2,i为2,第2次循环(7 > 5) 则不进行交换排序为 5,3,7,6,4,1,0,2,9,10,8。
- index = 2,i = 3, 3次 (6 > 5) 不交换 5,3,7,6,4,1,0,2,9,10,8。
- index = 2,i = 4, 4次 (4 < 5) 交换 5,3,4,6,7,1,0,2,9,10,8。
- index = 3,i = 5, 5次 (1 < 5) 交换 5,3,4,1,7,6,0,2,9,10,8。
- index = 4,i = 6, 6次 (0 < 5) 交换 5,3,4,1,0,6,7,2,9,10,8。
- index = 5,i = 7, 7次 (2 < 5) 交换 5,3,4,1,0,2,7,6,9,10,8。
- index = 6,i = 8, 8次 (9 > 5) 不交换 5,3,4,1,0,2,7,6,9,10,8。
- index = 6,i = 9, 9次 (10 > 5) 不交换 5,3,4,1,0,2,7,6,9,10,8。
- index = 6,i = 10, 10次 (8 > 5) 不交换 5,3,4,1,0,2,7,6,9,10,8。
for 循环结束
最后一次交换 - index = 6,pivot = 0, 10次 (2 > 5) 交换 2,3,4,1,0,5,7,6,9,10,8。
__EOF__
本文作者:Spoon | Blog
本文链接:https://www.cnblogs.com/Spoonblog/p/16588065.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Spoonblog/p/16588065.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!