我写了这个算法,它使用操作对一个数字列表进行排序,返回最短的序列。通过总是颠倒列表的前n个元素的顺序并从列表中删除第一个元素来排序。
def wenden(arr, n):
#dreht die Ersten n elemente um
i = 0
while i < n // 2:
arr[i], arr[n - i-1] = arr[n - i-1], arr[i]
i += 1
arr.pop(0)
return arr
def ist_Sortirt(arr):
for i in range(len(arr) - 1):
if arr[i] > arr[i+1]:
return False
return True
def best_sort(arr):
flips = []
if not ist_Sortirt(arr):
for i in range(1, len(arr)-1):
sort_lis = wenden(arr, i + 1)
flipi = [i+1]
flipi.append(best_sort(sort_lis))
flips.append(flipi)
ret = 0
for i in range(1, len(flips)-1):
if len(flips[i]) < len(flips[ret]):
ret = i
return flips[ret]
else:
return []
我已经测试了脚本与不同的输入列表,一个列表的短语应该输出,但我总是得到一个列表索引范围外的错误在return flips[ret]
在best_sort()
如果输入长于3个数字
输入:[2,1,3,6]
Traceback (most recent call last):
File "D:\programming\Aufgabe3a.py", line 69, in <module>
print(best_sort(pfannkuchen))
File "D:\programming\Aufgabe3a.py", line 47, in best_sort
flipi.append(best_sort(sort_lis))
File "D:\programming\Aufgabe3a.py", line 53, in best_sort
return flips[ret]
IndexError: list index out of range
2条答案
按热度按时间xmjla07d1#
我解决了这个问题。现在试试。
改变best_sort中的循环范围,而不是从1循环到len(arr)- 1,你应该从0循环到len(arr),以避免索引超出范围错误。
gzjq41n42#
最终,代码到达
arr
只有两个元素的位置。所以循环
for i in range(1, len(arr)-1)
变成了for i in range(1, 1)
,根本不执行,因此没有任何元素被追加到flips
,因此flips[ret]
超出了范围。