python——快速排序

快速排序:从列表中选取一个基准值,将比基准值小的值放在一个列表,将比基准值大的值放在另一个列表,对两个子列表继续进行快速排序,直到子列表中只有一个元素为止。时间为O(nlogn)~O(n^2).
def quick_sort(arr):
	# 列表中只有一个元素或为空,直接返回
	if len(arr) < 2:
		return arr
	else:
		# 选取基准值,此处选择列表的第一个值
		pivot = arr[0]
		less = [i for i in arr[1:] if i <= pivot]
		greater = [i for i in arr[1:] if i > pivot]

		return quick_sort(less) + [pivot] + quick_sort(greater)

arr = [10,5,2,3]
print(quick_sort(arr))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
快速排序可以使用循环实现。下面是使用循环实现快速排序Python代码: ```python def quick_sort(nums): stack = \[(0, len(nums) - 1)\] # 使用栈来保存待排序子数组的起始和结束索引 while stack: start, end = stack.pop() if start >= end: # 如果子数组长度小于等于1,则无需排序 continue pivot = nums\[start\] # 选择第一个元素作为基准值 left, right = start + 1, end while left <= right: while left <= right and nums\[left\] <= pivot: # 从左边找到第一个大于基准值的元素 left += 1 while left <= right and nums\[right\] >= pivot: # 从右边找到第一个小于基准值的元素 right -= 1 if left < right: # 交换左右两个元素 nums\[left\], nums\[right\] = nums\[right\], nums\[left\] nums\[start\], nums\[right\] = nums\[right\], nums\[start\] # 将基准值放到正确的位置 stack.append((start, right - 1)) # 将左边子数组的起始和结束索引入栈 stack.append((right + 1, end)) # 将右边子数组的起始和结束索引入栈 return nums ``` 这段代码使用了一个栈来保存待排序子数组的起始和结束索引。在循环中,每次从栈中弹出一个子数组,选择第一个元素作为基准值,然后使用双指针的方式将子数组分为两部分,左边部分的元素都小于等于基准值,右边部分的元素都大于等于基准值。然后将基准值放到正确的位置,并将左右两个子数组的起始和结束索引入栈。循环继续,直到栈为空,所有子数组都被排序完毕。最后返回排序后的数组。 这种循环实现的快速排序算法的时间复杂度和递归实现的快速排序算法相同,平均时间复杂度为O(nlogn),最坏情况下的时间复杂度为O(n^2),空间复杂度为O(logn)。它是一种不稳定的排序算法,但在实际应用中,由于其速度快,常常被使用。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [python排序算法——快速排序(附代码)](https://blog.csdn.net/AOAIYI/article/details/128691968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值