快速排序:
''' 快速排序:时间复杂度O(nlog2n) 利用归位函数进行递归调用 归位函数-左边都是比某元素小的,右边都是比某元素大的 快速排序至少比传统排序快100倍以上 快排弱点: 1.递归,比较消耗系统资源 2.最坏情况,如果一个倒序列表,时间复杂度O(n²),可以在归位前,随机选择一个数和第一个数交换,来尽可能避免最坏情况的出现。 ''' import sys import random sys.setrecursionlimit(100000) # Python默认递归最大深度999,可以修改为100000 def partition(li, left, right): # 归位函数 tmp = li[left] while left < right: while left < right and li[right] >= tmp: right -= 1 li[left] = li[right] while left < right and li[left] <= tmp: left += 1 li[right] = li[left] li[left] = tmp return left def _quick_sort(li, left, right): # 递归 if left < right: # 保证至少有两个元素才继续归位,有一个或0个元素就结束归位 random_loc = random.randrange(left, right) li[left], li[random_loc] = li[random_loc], li[left] # 随机交换位置,使快排最坏情况出现几率降到极低 mid = partition(li, left, right) _quick_sort(li, left, mid - 1) _quick_sort(li, mid + 1, right) def quick_sort(li): _quick_sort(li, 0, len(li) - 1) # li = list(range(10000, 0, -1)) # 快速排序最坏情况