我正在尝试使用python构建排序算法,但是我遇到了一个问题,我无法解决。我会在下面粘贴我的代码。
基本功能:
。
mainArr = [5, 2, 3, 6, 1, 4]
def sort():
sorted = True
tempVal = 0
for x in range(0, mainArr.len - 1):
if mainArr[x] > mainArr[x+1]:
sorted = False
tempVal = mainArr[x]
mainArr[x] = mainArr[x+1]
mainArr[x+1] = tempVal
sorted = False
print(mainArr)
if not sorted:
sort()
print("\n\n")
print(mainArr)我已经检查过密码了,但我想它需要一双全新的眼睛。
发布于 2022-11-15 17:36:10
首先,您需要调用您的sort()函数:
print(mainArr) # print the unsorted list
print()
sort() # sort the list
print()
print(mainArr) # print the sorted list这会导致一个错误:
for x in range(0, mainArr.len - 1):
AttributeError: 'list' object has no attribute 'len'这是因为,实际上,list没有len属性。您希望将mainArr.len更改为len(mainArr)。
这样就可以得到输出:
[5, 2, 3, 6, 1, 4]
[2, 3, 5, 1, 4, 6]
[2, 3, 1, 4, 5, 6]
[2, 1, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]中间的所有输出都是由sort()自身发出的,因为它是递归的。
使用该修复程序,您的sort函数可以工作,但以下是一些简单的修复/建议:
sorted是一个内置函数,因此不建议为另一个variable.tempVal来交换两个值;只需执行元组assignment!mainArr.。
使用这些修补程序,代码如下所示:
mainArr = [5, 2, 3, 6, 1, 4]
def sort(arr):
"""Sort the input list 'arr' in-place."""
is_sorted = True
for i in range(len(arr) - 1):
if arr[i] > arr[i+1]:
is_sorted = False
arr[i], arr[i+1] = arr[i+1], arr[i]
if not is_sorted:
sort(arr)
print(mainArr)
sort(mainArr)
print(mainArr)我还建议不要使用递归(Python默认不做尾调用优化,因此在使用循环时,您应该避免使用递归)。在您的while循环之外使用for循环,您将得到如下内容:
def sort(arr):
"""Sort the input list 'arr' in-place."""
keep_sorting = True
while keep_sorting:
keep_sorting = False
for i in range(len(arr) - 1):
if arr[i] > arr[i+1]:
arr[i], arr[i+1] = arr[i+1], arr[i]
keep_sorting = True发布于 2022-11-15 17:26:59
您的问题中没有包含特定的错误信息,因此很难理解哪里出了问题,但我注意到一件事是您已经写了:
mainArr.len。
这在python中是行不通的。Len是一个以数组作为参数的函数。你必须这样写:
len(mainArr)
https://stackoverflow.com/questions/74449778
复制相似问题