follow up :
kth largest number (quick select)
find median sort arrays( based on kth, 2 pointers, divide and conquer )
快排模板
def main():
length = int(input())
nums = [int(x) for x in input().split()]
quicksort(nums, 0, length - 1)
for i in nums:
print(i, end = ' ')
def quicksort(nums, start, end):
if start >= end :
return
left, right = start, end
pivot = nums[(start + end) // 2]
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]
left += 1
right -=1
quicksort(nums, start, right)
quicksort(nums, left, end)
main()
请问下为啥运行显示编译错误呀?
while left <= right and nums[left] < pivot 中 left <= right 是不必要条件,去掉也可以通过
为什么left都要<=right不能<right
吉良吉影の奇妙头像
请问一下交换后为什么left和right还要分别加1和减1呢?
如果nums[left] == nums[right] == pivot的话就跳不出循环了。
这里和y总的写法不同的原因在于y总是先做了一次i++和j–再进入循环的。