您的位置:首页 > 编程语言 > Python开发

快速排序的实现(python)

2016-12-15 23:24 337 查看
#!/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 快速排序