悉野小楼

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

快速排序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.一般以最左边为基点, 元素复制出去用作比较用, 最左边的位置就空着了, 然后从右边开始向左遍历, 比基点小的放到坑里面, 右边原来的位置就空出来了, 变成坑, 这时可以从左向右遍历, 找到比基点大的放到这个坑里面, 也叫挖坑法.

也可以新开一个一样大数组, 比基点小的放从最左边开始放, 比基点大的从右边开始放(多用内存, 直观理解)

posted on   悉野  阅读(46)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 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包
点击右上角即可分享
微信分享提示