快速排序-by-Python

最好时间复杂度:O(n*logn)
最坏时间复杂度:O(n²)
平均时间复杂度:O(n*logn)
空间复杂度:O(1)
是否是稳定排序:No
是否是原地排序:Yes

python 实现:

class Solution:
	def quickSort(self, nums, left, right):
		"""
		:type nums: List[int]
		:type left: int
		:type right: int
		:rtype: void
		"""
		if left >= right:
			return
		povit = self.partition(nums, left, right)
		self.quickSort(nums, left, povit-1)
		self.quickSort(nums, povit+1, right)

	def partition(self, nums, left, right):
		"""
		:type nums: List[int]
		:type left: int
		:type right: int
		:rtype: int
		"""
		# 以末点作为分界点
		povit = nums[right]
		povit_index = left
		for i in range(left, right):
			# 将小于分界点的值从最左侧依次摆放,不考虑它们的顺序
			if nums[i] < povit:
				nums[povit_index], nums[i] = nums[i], nums[povit_index]
				povit_index += 1
		# 将分界点放到正确的位置
		nums[right], nums[povit_index] = nums[povit_index], nums[right]
		return povit_index

if __name__ == "__main__":
	nums = [1,3,2,4,6,8,4,5,6,7,11,13,10,21,12]
	s = Solution()
	# 注意使用时传入的是length-1,否则会发生越界
	s.quickSort(nums, 0, len(nums)-1)
	print(nums)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值