# 时间复杂度 nlog(n)
# nums属于list,是可变类型
def quick_sort(nums, start, end):
if start >= end:
return
mid_data = nums[start] # 取该部分的第一个元素nums[start]作为比较标杆
# 双指针
left = start
right = end
while left < right:
# nums[right] >= mid_data 不要遗漏等号的情况
while nums[right] >= mid_data and left < right:
right -= 1
# nums[right] < mid_data
nums[left] = nums[right] # 将右边的小于中间数的数,放到左边
while nums[left] < mid_data and left < right:
left += 1
# nums[left] >= mid_data
nums[right] = nums[left] # 将左边的大于等于中间数的数,放到右边
# 当left==right时,退出循环
nums[left] = mid_data # 将缺少的元素mid_data,补回去到nums[left]
# 分别对左边部分和右边部分递归
quick_sort(nums, start, left - 1)
quick_sort(nums, left + 1, end)
if __name__ == '__main__':
nums = [6, 2, 5, 9, 1]
quick_sort(nums, 0, len(nums) - 1)
print(nums)
快速排序 python实现
最新推荐文章于 2024-11-02 16:28:26 发布