我试着在python中编写一个quicksort的实现(这里有很多可用的,但我的目标是在没有复制/粘贴的情况下尝试自己,只是练习从伪代码到真实代码)
Hello
对于左侧分区,我必须添加条件test = [21, 4, 1, 3, 9, 20, 25, 6, 21, 14]
def partition(arr, istart, pivot):
while pivot > istart :
if arr[pivot] <= arr[istart]:
arr[istart], arr[pivot - 1], arr[pivot] = arr[pivot - 1], arr[pivot], arr[istart]
pivot -= 1
else:
istart += 1
if (pivot + 1 < len(arr) - 1): # right partition
partition(arr, pivot + 1, len(arr) - 1 )
if (pivot - 1 > 0) and (pivot < len(arr) - 1) : #left partition
partition(arr, 0, pivot -1)
return arr
def quicksort(arr):
if len(arr) < 2:
return arr
else:
return partition(arr, 0, len(arr) - 1)
才能使代码生效,否则我会收到以下错误:(pivot < len(arr) - 1)
。
我无法理解为什么我需要额外的条件:左侧分区的枢轴应该随着左侧越来越多的元素被排序而减少。那么,为什么我需要那个条件呢?