#!/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)
快速排序的实现(python)
最新推荐文章于 2026-05-13 14:22:42 发布
本文详细介绍了快速排序算法的原理及Python实现过程,通过实例代码展示如何进行排序操作,包括分区、选择基准元素等关键步骤,助你深入理解快速排序算法。
&spm=1001.2101.3001.5002&articleId=53679141&d=1&t=3&u=3b36bd2cb4ef4f0d9c7a508c8706307c)
1139

被折叠的 条评论
为什么被折叠?



