gpt4 book ai didi

python - Python 中的快速排序抛出 RecursionError

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:39:47 26 4
gpt4 key购买 nike

我在 Python 中编写了以下用于快速排序的代码,但出现RecursionError: maximum recursion depth exceeded in comparison。在运行另一个具有相同逻辑的代码时,它运行良好。

下面是我写的代码:

def partition(Arr,start,end):
pivot=Arr[end]
pindex=start

for i in range(start,end):
if Arr[i] <= pivot:

Arr[i],Arr[pindex] = Arr[pindex],Arr[i]
pindex += 1

#print("pindex",pindex)
Arr[pindex],Arr[end]=Arr[end],Arr[pindex]
return pindex


def QuickSort(Arr,start,end):

if(start>=end):
return Arr


if (start<end):
pindex=partition(Arr,start,end)


QuickSort(Arr, start, pindex-1)

QuickSort(Arr, pindex-1, end)





Array = [10, 7, 8, 9, 1, 5]
start=0
end=len(Array)-1
sort_Arr=QuickSort(Array,start,end)
print ("Sorted array is: {}",sort_Arr)

下面是运行良好的 GeeksforGeeks 的代码:

# This function takes last element as pivot, places
# the pivot element at its correct position in sorted
# array, and places all smaller (smaller than pivot)
# to left of pivot and all greater elements to right
# of pivot
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 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)

以下是回溯:

Traceback (most recent call last):
File "QuickSort.py", line 55, in <module>
sort_Arr=QuickSort(Array,start,end)
File "QuickSort.py", line 46, in QuickSort
QuickSort(Arr, pindex-1, end) #Sorting Array elements after pivot point which are value>pivot
File "QuickSort.py", line 44, in QuickSort
QuickSort(Arr, start, pindex-1) #Sorting Array elements before pivot point which are value<=pivot
File "QuickSort.py", line 46, in QuickSort
QuickSort(Arr, pindex-1, end) #Sorting Array elements after pivot point which are value>pivot
File "QuickSort.py", line 46, in QuickSort
QuickSort(Arr, pindex-1, end) #Sorting Array elements after pivot point which are value>pivot
File "QuickSort.py", line 46, in QuickSort
QuickSort(Arr, pindex-1, end) #Sorting Array elements after pivot point which are value>pivot
[Previous line repeated 990 more times]
File "QuickSort.py", line 41, in QuickSort
pindex=partition(Arr,start,end) #Calculating partition Index point by calling partition Function
File "QuickSort.py", line 22, in partition
for i in range(start,end):
RecursionError: maximum recursion depth exceeded in comparison

谁能帮我解决这个问题?为什么我的代码没有运行?任何建议表示赞赏。

最佳答案

您已选择用 start,end 表示数组中的范围,其中 end 是最后一个元素的索引。因此这段代码

    QuickSort(Arr, start, pindex-1)                 
QuickSort(Arr, pindex-1, end)

不会将数组分成两个不相交的部分 -- pindex-1 将在两个部分中,并且递归不会终止,因为第二部分的大小永远不会变为一。

更好的约定是让 end 指向最后一个元素之后。 Dijkstra can explain why in more detail.

关于python - Python 中的快速排序抛出 RecursionError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52801185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com