快速排序的实现(python)

本文详细介绍了快速排序算法的原理及Python实现过程,通过实例代码展示如何进行排序操作,包括分区、选择基准元素等关键步骤,助你深入理解快速排序算法。
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import random

#快速排序基础
def PARTITION(A, p, r):
    x = A[r]
    i = p - 1;
    j = p
    while(j < r):
        if (A[j] < x):
            i += 1
            temp = A[i]
            A[i] = A[j]
            A[j] = temp
        j += 1

    i += 1
    temp = A[i]
    A[i] = A[r]
    A[r] = temp

    return i

def RANDOMIZED_PARTITION(A, p, r):
    i = random.randint(p, r)
    temp = A[i]
    A[i] = A[r]
    A[r] = temp
    return PARTITION(A, p, r)

#使用两个递归的版本
def QUICKSORT(A, p, r):
    if (p < r):
        q = RANDOMIZED_PARTITION(A, p, r)
        #写代码时这步碰到一个坑,没有写成q-1,则会进入一个死循环,因为每次返回的q都会是自己传入的q
        QUICKSORT(A, p, q-1)
        QUICKSORT(A, q+1, r)

#使用尾递归版本这种栈深度最坏情况O(n)
def TAIL_RECURSIVE_QUICKSORT(A, p, r):
    while(p < r):
        q = RANDOMIZED_PARTITION(A, p, r)
        TAIL_RECURSIVE_QUICKSORT(A, p, q-1)
        p = q + 1

#这种情况每次将元素少的进行递归,元素多的进行循环,则最坏情况栈深度能为O(lgn)
def TAIL_RECURSIVE_QUICKSORT_OPTIMIZE(A, p, r):
    while(p < r):
        q = RANDOMIZED_PARTITION(A, p, r)
        if ((q-p) < (r-q)):
            TAIL_RECURSIVE_QUICKSORT_OPTIMIZE(A, p, q-1)
            p = q + 1
        else:
            TAIL_RECURSIVE_QUICKSORT_OPTIMIZE(A, q+1, r)
            r = q - 1

if __name__ == '__main__':
    A = [5, 4, 6, 9, 12, 35, 34, 32, 11, 23, 21, 14, 3, 8]
    TAIL_RECURSIVE_QUICKSORT_OPTIMIZE(A, 0, len(A)-1)
    print(A)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值