数据结构与算法03(python实现)__快速排序
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
步骤为:
- 从数列中挑出一个元素,称为"基准"(pivot),
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
def quick_sort(li, start, end): # start:指明排序的列表的起始下标 # end:指明排序的列表的结束下标 ''' 快速排序 找一个基准,使得左边的都比它小,右边的都比它大 再对上一步的左右边,分别找其的基准,使得它满足左边的比它小,右边的比它大 递归上面的步骤 最终达到,每个元素所处的位置,就是他正确排序后对应的index(下标) ''' # 补充:递归的终止条件 if start >= end: return # 假定的基准 mid = li[start] # 开始让两边进行移动操作 # 需要两个游标 left = start right = end # 只有左游标小于右游标,重复下面的分别移动 while left < right: # 先移动右侧 while left < right and li[right] > mid: right -= 1 # 不断左移 # 设置值,把这个值,设置给左边 li[left] = li[right] # 移动左边 while left < right and li[left] < mid: left += 1 # 设置值 li[right] = li[left] # 退出循环的时候,表示找到了中间位置 li[left] = mid # 找到了mid的正确位置 # 递归 quick_sort(li, start, left-1) # 这里不能切片,传的都是同一个列表对象 quick_sort(li, left+1, end) if __name__ == '__main__': li = [54, 26, 93, 17, 77, 31, 44, 55, 20] print(li) quick_sort(li, 0, len(li)-1) print(li)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)