python版快速排序

快速排序原理

免费快速排序视频
快速排序思路:

  1. 取一个元素p(第一个元素),使元素p归位;
  2. 列表被p分成两部分,左边都比p小,右边都比p大;
  3. 递归完成排序
import random
def partition(li, left, right):
	tmp = li[left]
	while left < right:
		while left < right and li[right] >= tmp:  # 从右面找出比tmp小的数
			right -= 1 # 往左走一步
		li[left] = li[right] # 把右边的值写到左边空位上
		while left < right and li[left] <= tmp:
			left += 1 # 往右走一步
		li[right] = li[left]   # 把左边的值写到右边空位上
	li[left] = tmp # 把tmp归位
	return left
	
def quick_sort(data, left, right):
	if left < right:
		mid = partition(data, left, right)
		quick_sort(data, left, mid-1)
		quick_sort(data, mid+1, right)

li = list(range(1000))
random.shuffle(li)
quick_sort(li, 0, len(li)-1)
print(li)

时间复杂度:O(nlogn)

递归问题–递归深度
修改递归深度:

import sys
sys.setrecursionlimit(2000) 
# 递归深度修改为2000

最坏情况–每次pass掉一个数字

9,8,7,6,5,4,3,2,1  
1,8,7,6,5,4,3,2,9
1,8,7,6,5,4,3,2
8,7,6,5,4,3,2
2,7,6,5,4,3,8
2,7,6,5,4,3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值