本文主要是介绍python实现快速排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# 快速排序
# 将元素放到自己应有的位置,左边的数都比它小,右边的数都比它大
# 递归完成
'''
时间复杂度,O(n*log(n)) (一般情况)
快速排序的问题
最坏情况 排一个倒叙的列表 解决方法,在列表中随机找一个数与第一个数进行交换
递归 容易超过递归的最大深度
'''
import random
# import sys
# sys.setrecursionlimit(10000) 该表最大递归深度
'''
快速排序
快速排序思路
取一个元素p(第一个元素),使元素p归位
列表被p分为两个部分,左变都比p小右边都比pda
递归完成排序
'''
def partition(li, left, right):
# 将最左边的元素给tmp
tmp = li[left]
while left < right:
while left < right and li[right]>=tmp: # 从右面找出比tmp小的数
right -= 1
li[left] = li[right] # 将右边第一个小于tmp的数放到左边的空位上
while left < right and li[left] <= tmp: # 从左边找出比tmp大的数
left += 1
li[right] = li[left] # 将左边第一个大于tmp的数放到右边刚才腾出来的空位上
li[left] = tmp # 将tmp归位,放到了左边全比它小,右面全比它大的位置,也就是它最后应在的位置
return left # 这个left代表的就是tmp位置的索引
def quick_sort(li, left, right):
if left < right: # 至少有两个元素,是判断递归是否停止的条件
mid = partition(li, left, right)
quick_sort(li,left, mid-1)
quick_sort(li, mid+1,right)
li = list(range(10000))
random.shuffle(li)
quick_sort(li, 0, len(li)-1)
print(li)
这篇关于python实现快速排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!