我试着用python编写一个quicksort的实现(这里有很多可用的实现,但是我的目标是自己尝试而不复制/粘贴,只是练习从伪代码到真实代码)。你知道吗
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)
才能使代码正常工作,否则会出现以下错误:RecursionError: maximum recursion depth exceeded in comparison
。
我不明白为什么我需要额外的条件:左边分区的枢轴应该随着左边越来越多的元素被排序而减少。那么,为什么我需要这个条件?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐