算法导论-Python实现-快速排序

快速排序:
对于包含 n 个数的输入数组,快速排序算法的复杂度在最坏的情况下是Θ(n^2),虽然在最坏的情况下和插入排序相近,但是最坏的情况出现的概率很低,快速排序是实际应用中最好的选择,平均排序时间是Θ(nlgn)。
快速排序的原理也是使用分治策略,选出一个序列中的元素作为主元,然后让序列左边的都小于等于主元,右边的序列大于等于主元。由于是在序列的原地址进行的排列,当递归完成之后,排序也就完成了。
快速排序完成A = (2, 8, 7, 1, 3, 5, 6, 4)在选取尾部 4 进行第一次递归算法示意图:
这里写图片描述
Python实现代码:

import random


def Exchange(A, i, j):
    temp = A[i]
    A[i] = A[j]
    A[j] = temp
    return 0


def Partition(A, p, r):
    random_num = random.choice(range(p, r+1))
    Exchange(A, r, random_num)
    x = A[r]
    i = p - 1
    for j in range(p, r):
        if A[j] <= x:
            i += 1
            Exchange(A, i, j)
    Exchange(A, i+1, r)
    return i+1


def Quick_sort(A, p, r):
    if p < r:
        q = Partition(A, p, r)
        Quick_sort(A, p, q-1)
        Quick_sort(A, q+1, r)


A = [2, 8, 7, 1, 3, 5, 6, 4]
print('Before sort:', A)
Quick_sort(A, 0, len(A)-1)
print('After sort:', A)

运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值