首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我排序算法中的错误是什么?

我排序算法中的错误是什么?
EN

Stack Overflow用户
提问于 2022-11-15 17:21:08
回答 2查看 42关注 0票数 0

我正在尝试使用python构建排序算法,但是我遇到了一个问题,我无法解决。我会在下面粘贴我的代码。

基本功能:

  • 获取一个数字数组
  • ,检查一个数字是否大于下一个
  • (如果是的话),交换它并设置一个变量来告诉函数在结束时再次运行数字应该是升序的

代码语言:javascript
复制
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)

我已经检查过密码了,但我想它需要一双全新的眼睛。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-15 17:36:10

首先,您需要调用您的sort()函数:

代码语言:javascript
复制
print(mainArr)  # print the unsorted list
print()
sort()          # sort the list
print()
print(mainArr)  # print the sorted list

这会导致一个错误:

代码语言:javascript
复制
    for x in range(0, mainArr.len - 1):
AttributeError: 'list' object has no attribute 'len'

这是因为,实际上,list没有len属性。您希望将mainArr.len更改为len(mainArr)

这样就可以得到输出:

代码语言:javascript
复制
[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.
  • You使用该名称--不需要在assignment!
  • If中使用tempVal来交换两个值;只需执行元组assignment!
  • If,函数就可以将列表作为参数进行排序,而不仅仅是mainArr.

使用这些修补程序,代码如下所示:

代码语言:javascript
复制
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循环,您将得到如下内容:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2022-11-15 17:26:59

您的问题中没有包含特定的错误信息,因此很难理解哪里出了问题,但我注意到一件事是您已经写了:

mainArr.len

这在python中是行不通的。Len是一个以数组作为参数的函数。你必须这样写:

len(mainArr)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74449778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档