【发布时间】:2020-09-11 00:26:21
【问题描述】:
我将第一个元素作为起始值和枢轴值。
当枢轴小于结束值时增加起始位置。
当枢轴大于结束值时减少结束位置。
此外,每次通过完成时交换开始和结束位置。
如果起始位置与结束位置交叉,那么我将交换枢轴和结束元素。
def partition(arr, lb, ub):
pivot = arr[lb]
start = lb
print('start', start)
end = ub
print('end', end)
while start <= end:
while arr[start] <= pivot:
start += 1
while arr[end] >= pivot:
end -= 1
if start <= end:
arr[start], arr[end] = arr[end], arr[start]
else:
arr[end], arr[lb] = arr[lb], arr[end]
return end
def quickSort(arr, lb, ub):
if lb >= ub:
return 0
loc = partition(arr, lb, ub)
quickSort(arr, lb, loc-1)
quickSort(arr, loc+1, ub)
arr = [10, 4, 7, 3, 8, 6, 9, 1, 5, 2]
n = len(arr)
print(n)
quickSort(arr, 0, len(arr) -1)
print ("Sorted array is:")
for i in range(n):
print("%d" % arr[i])
我收到以下错误: 索引错误
---> quickSort(arr, 0, len(arr) -1)
Error in partition(arr, lb, ub)
---> while arr[start] <= pivot:
IndexError: list index out of range
谁能告诉我这段代码有什么问题?
【问题讨论】:
标签: python python-3.x algorithm sorting quicksort