【发布时间】:2018-09-13 13:02:44
【问题描述】:
我的快速排序有点问题。这是我的程序:
def main():
Array = [10, 5, 3, 8, 6, 7, 4, 9, 2, 1, 10]
right_index = (len(Array) - 1)
left_index = 0
Quicksort(Array, left_index, right_index)
def Quicksort(Array, left_index, right_index):
if len(Array) == 1:
return Array
pivot_index = Partition(Array, left_index, right_index)
Quicksort(Array, left_index, pivot_index-1)
Quicksort(Array, pivot_index + 1, right_index)
return Array
def Partition(Array, left_index, right_index):
pivot = Array[left_index]
i = left_index + 1
for j in range(left_index + 1, right_index):
if Array[j] <= pivot:
Array[j], Array[i] = Array[i], Array[j]
i += 1
Array[left_index], Array[i - 1] = Array[i - 1], Array[left_index]
return i - 1
main()
我做错了吗?我得到错误:for j in range(left_index + 1, right_index):
RecursionError: maximum recursion depth exceeded in comparison".
感谢任何人提供的任何帮助。
【问题讨论】:
-
快速排序函数中的基本情况考虑
-
我在调用 partition 之前添加了一条语句,以确保 left_index 始终小于 right 索引,因此它不会永远递归调用,对吗?虽然现在我得到了错误: Array[left_index], Array[i-1] = Array[i-1], Array[left_index] IndexError: list index out of range
-
哥们,你错过了 len(Array) 永远不会减少你调用函数的方式。
-
你能再详细一点吗?感谢您的帮助,很抱歉,递归算法相对较新。
标签: arrays python-3.x algorithm recursion quicksort