什么';这个快速排序代码(Python)有什么问题?
这是用Python 3编写的。代码如下:什么';这个快速排序代码(Python)有什么问题?,python,python-3.x,algorithm,sorting,quicksort,Python,Python 3.x,Algorithm,Sorting,Quicksort,这是用Python 3编写的。代码如下: def partition(arr, l, h): pivot = arr[l] i = l+1 j = h while i <= j: print('i is ', i) print('j is ', j) while arr[i] < pivot: i += 1 while arr[j] > pivot: j -= 1 arr[i], arr[j] = arr[
def partition(arr, l, h):
pivot = arr[l]
i = l+1
j = h
while i <= j:
print('i is ', i)
print('j is ', j)
while arr[i] < pivot:
i += 1
while arr[j] > pivot:
j -= 1
arr[i], arr[j] = arr[j], arr[i]
# Placing the pivot at its sorted position
arr[j], arr[l] = pivot, arr[j]
return j
def quicksort(arr, l, h):
if l >= h:
return arr
p = partition(arr, l, h)
print('p is ', p)
quicksort(arr, l, p-1)
quicksort(arr, p+1, h)
test = [4, 2, 7, 1]
sorted_test = quicksort(test, 0, len(test)-1)
print(sorted_test)
def分区(arr、l、h):
枢轴=arr[l]
i=l+1
j=h
当我转向时:
j-=1
arr[i],arr[j]=arr[j],arr[i]
#将轴放置在其排序位置
arr[j],arr[l]=枢轴,arr[j]
返回j
def快速排序(arr、l、h):
如果l>=h:
返回arr
p=分区(arr,l,h)
打印('p is',p)
快速排序(arr、l、p-1)
快速排序(arr,p+1,h)
测试=[4,2,7,1]
排序测试=快速排序(测试,0,len(测试)-1)
打印(U测试)
这是输出-
根据错误,arr[i]超出范围,但变量“i”如何达到该值?
我知道还有其他方法可以实现这一点,但我在这里做错了什么?下面是代码
def partition(arr, low, high):
i = (low-1) # index of smaller element
pivot = arr[high] # pivot
for j in range(low, high):
# If current element is smaller than or
# equal to pivot
if arr[j] <= pivot:
# increment index of smaller element
i = i+1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return (i+1)
# The main function that implements QuickSort
# arr[] --> Array to be sorted,
# low --> Starting index,
# high --> Ending index
# Function to do Quick sort
def quickSort(arr, low, high):
if len(arr) == 1:
return arr
if low < high:
# pi is partitioning index, arr[p] is now
# at right place
pi = partition(arr, low, high)
# Separately sort elements before
# partition and after partition
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
# Driver code to test above
arr = [10, 7, 8, 9, 1, 5]
n = len(arr)
quickSort(arr, 0, n-1)
test = [4, 2, 7, 1]
quicksort(test, 0, len(test)-1)
print("Sorted array is:")
for i in range(len(test)):
print("%d" % test[i])
def分区(arr、低、高):
i=(低-1)#较小元素的指数
枢轴=arr[高]#枢轴
对于范围内的j(低、高):
#如果当前元素小于或
#等于枢轴
如果要排序的arr[j]数组,
#低-->起始索引,
#高-->结束索引
#用于快速排序的函数
def快速排序(arr、低、高):
如果len(arr)==1:
返回arr
如果低<高:
#pi是分区索引,arr[p]现在是
#在正确的地方
pi=分区(arr、低、高)
#在之前分别对元素进行排序
#分区和分区后
快速排序(arr、低、pi-1)
快速排序(arr、pi+1、高)
#上面要测试的驱动程序代码
arr=[10,7,8,9,1,5]
n=长度(arr)
快速排序(arr,0,n-1)
测试=[4,2,7,1]
快速排序(测试,0,len(测试)-1)
打印(“排序数组为:”)
对于范围内的i(len(测试)):
打印(“%d”%test[i])
看起来您正在增加
i
,直到它从列表末尾消失,并试图访问arr[i]
@khelwood是的,我知道了。但我不明白这是怎么发生的。变量“i”不应达到该值。好的。那么,当你有while-arr[i]
时,什么会阻止i
达到那个值呢?@khelwood当我