快速排序的实现(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 3.2 实现快速排序 源代码
- Python实现快速排序
- python 实现快速排序
- 利用Python实现快速算法排序
- python实现排序算法一:快速排序
- python 3.2 实现快速排序 源代码
- 用Python实现八大排序算法--快速排序
- 快速排序的算法思想及Python版快速排序的实现示例
- 【编程练习】快速排序,Java和Python实现
- python排序算法的实现-快速排序
- Python实现快速排序
- Python 快速排序 堆排序——Python实现一些算法持续更新
- Python递归实现快速排序
- python 算法 排序实现快速排序
- 快速排序--C语言实现、python实现
- 算法导论快速排序python实现
- 快速排序python实现
- 常用排序算法python实现:快速排序
- 快速排序——Python实现(1)
- 快速排序之python实现