快速排序python实现
def quick_sort(arr, left, right): origin_left = left origin_right = right pivot_data = arr[left] #枢轴上的值(基准值), 就是开始用来比较的值, 一般是随机选择一个位置, 这儿选择最左边的值 #blank_pos = left # 最左边的值已经复制到pivot中了, 所以这块内存可以使用, 作为空缺位置 初始left指向的位置就是个可以使用的空位 left_to_right = False #当前是否从左向右移动指针(初始最空缺在最左边, 所以从右向左遍历) while(left != right): if left_to_right: # 从左向右 if arr[left] > pivot_data: arr[right] = arr[left] right -= 1 left_to_right = False else: # 继续右移 left += 1 else: # 从右向左 # 如果小于基准值, 放左到边去 if arr[right] < pivot_data: arr[left] = arr[right] # right位置的值复制给了left位置, right位置可以看成空位, 后面比pivot_data大的值, 可以放到这个位置 left += 1 left_to_right = True else: right -= 1 # 左右两个重叠就是基准值的位置 arr[left] = pivot_data print(arr) if left - origin_left > 1: quick_sort(arr, origin_left, left - 1) if origin_right - left > 1: quick_sort(arr, left + 1, origin_right) test_arr = [3,5,2,1,6,7,9,4] quick_sort(test_arr, 0, len(test_arr) - 1) print(test_arr)
1.随机一个基点, 遍历全数组, 比基点大的放左边, 比基点小的放右边. 以基点为分隔左右两边再递归调用同样处理.
2.一般以最左边为基点, 元素复制出去用作比较用, 最左边的位置就空着了, 然后从右边开始向左遍历, 比基点小的放到坑里面, 右边原来的位置就空出来了, 变成坑, 这时可以从左向右遍历, 找到比基点大的放到这个坑里面, 也叫挖坑法.
也可以新开一个一样大数组, 比基点小的放从最左边开始放, 比基点大的从右边开始放(多用内存, 直观理解)
分类:
数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2013-08-29 linux包转发开发
2013-08-29 [转]用man查看命令帮助时, 括号中的数字表示的意思
2013-08-29 内网安装ubuntu包