重新理解快速排序

简介: 重新理解快速排序

QuickSort

QuickSort 版本一

依据

QuickSort版本一其实是依据 ‘荷兰国旗问题' 实现的。只不过这次划分时只有大于或者小于num的数。


思路

  1. 取数组最右的数作为num,划分为两个区域(大于、小于)
  2. 在两个区域里重复第一部操作


QuickSort 版本二

依据

QuickSort版本二就是实打实的依据 ‘荷兰国旗问题' 实现的。


思路

  1. 取数组最右的数作为num,划分为两个区域(大于、小于,等于)
  2. 在两个(大于、小于)区域里重复第一部操作


QuickSort 版本三

思考

版本一和版本二本质差不多,版本二较版本一的优化并没有多少。

之前一直考虑的情况都是能够分出三个部分,但如果只能分出两个部分(大于和等于、小于和等于)

/******假如给一个数组[1,2,3,4,5,6,7,8,9]******/

[1,2,3,4,5,6,7,8,]9]

[1,2,3,4,5,6,7,]8,9]

[1,2,3,4,5,6,]7,8,9]

           .

           .

           .


由于每次只能往一个区域进行递归,最后的时间复杂度也只能是0(N^2).


思路

  1. 随机取数组中的一个数作为num,与最右数交换,划分区域(大于、小于、等于)
  2. 在两个区域里重复第一部操作


总结

最后版本的时间复杂度也只能依靠概率来决定了,版本三的依据依旧是荷兰国旗问题

目录
相关文章
|
域名解析 网络协议 测试技术
[插件使用] SwitchHosts自动更新Github Hosts文件
[插件使用] SwitchHosts自动更新Github Hosts文件
3286 0
|
7月前
|
存储 SQL 算法
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
例如,在一个有 10 个节点的系统中,增加一个新节点,只会影响到该新节点在哈希环上相邻的部分数据,其他大部分数据仍然可以保持在原节点,大大减少了数据迁移的工作量和对系统的影响。狠狠卷,实现 “offer自由” 很容易的, 前段时间一个武汉的跟着尼恩卷了2年的小伙伴, 在极度严寒/痛苦被裁的环境下, offer拿到手软, 实现真正的 “offer自由”。在 3 - 5 年的中期阶段,随着业务的稳定发展和市场份额的进一步扩大,订单数据的增长速度可能会有所放缓,但仍然会保持在每年 20% - 30% 的水平。
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
|
新零售 自然语言处理 运维
一文详解 | 开放搜索兼容Elasticsearch做召回引擎
开放搜索发布开源兼容版,支持阿里云Elasticsearch做搜索召回引擎,本文详细介绍阿里云ES用户如何通过接入开放搜索兼容版丰富行业分词库,提升查询语义理解能力,无需开发、算法投入,即可获得淘系同款搜索效果。
1813 0
|
11月前
|
数据采集 测试技术 Swift
666条数据,训练LongWriter模型,写万字长文!模型&数据集均开源!
大模型的上下文(Context)支持越来越长的背景下,让通用的大模型遵循指令来保障长文本输出的长度,依然是一个挑战。
|
7月前
|
机器学习/深度学习 人工智能 并行计算
一文了解火爆的DeepSeek R1 | AIGC
DeepSeek R1是由DeepSeek公司推出的一款基于强化学习的开源推理模型,无需依赖监督微调或人工标注数据。它在数学、代码和自然语言推理任务上表现出色,具备低成本、高效率和多语言支持等优势,广泛应用于教育辅导、金融分析等领域。DeepSeek R1通过长链推理、多语言支持和高效部署等功能,显著提升了复杂任务的推理准确性,并且其创新的群体相对策略优化(GRPO)算法进一步提高了训练效率和稳定性。此外,DeepSeek R1的成本低至OpenAI同类产品的3%左右,为用户提供了更高的性价比。
2432 11
|
存储 算法 Python
Python图论实战:从零基础到精通DFS与BFS遍历,轻松玩转复杂网络结构
【7月更文挑战第11天】图论在数据科学中扮演关键角色,用于解决复杂网络问题。Python因其易用性和库支持成为实现图算法的首选。本文通过问答形式介绍DFS和BFS,图是节点和边的数据结构,遍历用于搜索和分析。Python中图可表示为邻接表,DFS用递归遍历,BFS借助队列。DFS适用于深度探索,BFS则用于最短路径。提供的代码示例帮助理解如何在Python中应用这两种遍历算法。开始探索图论,解锁更多技术可能!
304 6
|
存储 SQL 安全
【绝密攻略】Flask应用如何抵御黑客入侵?七大安全技巧助你构建固若金汤的Web防线!
【8月更文挑战第31天】安全性是Web应用开发中的关键部分。Flask作为一款轻量级且高度可定制的框架,虽灵活但需开发者确保应用安全。本文介绍如何通过具体措施加固Flask应用,包括更新依赖项、启用CSRF保护、使用HTTPS、安全存储密码、防止SQL注入及清理用户输入等。通过示例代码展示如何在实际开发中应用这些策略,帮助提升应用安全性,为用户提供更可靠的服务。
438 0
|
运维 监控 网络协议
IP 地址是什么,有什么用,通俗易懂答案?
**IP地址是互联网上设备的唯一标识,分为IPv4(32位,如192.168.1.1)和IPv6(128位,如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。IP地址用于定位设备、数据包传递、网络安全和管理。分为公有(全球唯一)和私有(局域网内使用)IP,以及动态(DHCP分配)和静态(固定不变)IP。IP管理由ICANN和区域机构负责。了解IP地址基础知识对网络理解和故障排查至关重要。**
1484 3
|
机器学习/深度学习 算法 搜索推荐
手把手教你强化学习 (三)马尔可夫决策过程与贝尔曼方程
手把手教你强化学习 (三)马尔可夫决策过程与贝尔曼方程
1053 0