快速排序(python实现)

快速排序算法

基本思想

(1)选定pivot中心轴
(2)将大于pivot的数字放在pivot的右边
(3)将小于pivot的数字放在pivot的左边
(4)分别对左右子序列重复前三步操作

代码实现

""
快速排序
1.选定pivot中心轴
2.将大于pivot的数字放在pivot的右边
3.将小于pivot的数字放在pivot的左边
"""


# left是左边索引,right是右边索引
def QSort(arry, left, right):
    if left >= right:
        return
    l = left
    r = right
    pivot = arry[left]  # 选取pivot

    while l < r:
        # 首先右指针从右往左开始寻找,将大于pivot的数字放在pivot的右边,得到右子序列都比pivot大
        while l < r and arry[r] >= pivot:
            # 右指针向左移动,索引减1
            r -= 1
        # 右指针指的值大于pivot的值,需要将右指针上的值赋给左指针
        arry[l] = arry[r]
        # 左指针从左往右开始寻找,将小于pivot的数字放在pivot的左边,得到左子序列都比pivot小
        while l < r and arry[l] < pivot:
            # 左指针向右移动,索引加1
            l += 1
        # 右指针指的值大于pivot的值,需要将右指针上的值赋给左指针
        arry[r] = arry[l]
    arry[l] = pivot
    # 左子序列的新的pivot索引值应该为上一次pivot索引值 - 1
    QSort(arry, left, r - 1)  # 对左子序列进行重复快排的操作
    # 右子序列的新的pivot索引值应该为上一次pivot索引值 + 1
    QSort(arry, r + 1, right)  # 对右子序列进行重复快排的操作
    return arry


arr = [4, 5, 8, 2, 3, 1, 9, 7]
result = QSort(arr, 0, len(arr) - 1)
print(result)

快速排序的平均时间复杂度为O(nlogn),最坏情况是O(n2),最好情况为O(nlogn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值