快速排序
- 快速排序(英语:Quicksort),又称为交换排序,通过一趟排序将要排序的数据分割为独立的两部分。假设要排序的列表是 A[0]……A[N-1],首先任意选取一个数据(通常选用列表的第一个数)作为基准数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
- 步骤:
(1) 设置两个变量 low、high,排序开始的时候:low=0,high=N-1;(2) 以第一个列表元素作为基准数据,赋值给 mid,即 mid=A[0];(3) 从 high 开始向前搜索,即由后开始向前搜索(high--),找到第一个小于 mid 的值A[high],将 A[hight]和 A[low]的值交换;(4) 从 low 开始向后搜索,即由前开始向后搜索(low++),找到第一个大于 mid 的A[low],将 A[low]和 A[high]的值交换;v>(5) 重复第 3、4 步,直到 low=high。
1 def quick_sort(alist,start,end): 2 #递归退出的条件 3 if start >= end: 4 return 5 #基准数 6 mid = alist[start] 7 low = start 8 high = end 9 while low < high: 10 #从右向左 11 while low < high and alist[high] > mid: 12 high -= 1 13 #将high索引对应的元素赋值给low 14 alist[low] = alist[high] 15 #从左往右 16 while low < high and alist[low] < mid: 17 low += 1 18 alist[high] = alist[low] 19 #将基准数放置到对应位置 20 alist[low] = mid 21 #比基准数小的左边的数 重复调用quick_soort() 22 quick_sort(alist,start,low-1) 23 ##比基准数大的右边的数 重复调用quick_soort() 24 quick_sort(alist,low+1,end) 25 if __name__ == '__main__': 26 alist = [54,26,93,17,77,31,44,55,20] 27 print('原数组:',alist) 28 quick_sort(alist,0,len(alist)-1) 29 print('现数组:',alist)
1 原数组: [54, 26, 93, 17, 77, 31, 44, 55, 20] 2 现数组: [17, 20, 26, 31, 44, 54, 55, 77, 93]
最优时间复杂度:O(nlogn)最坏时间复杂度:O(n2)稳定性:不稳定
作者:小他_W@monster
欢迎大家来到我的博客!!!。
如果文章和代码有表述不当之处,还请不吝赐教。
正是江南好风景
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析