数组排序顺序重新出现

时间:2017-12-22 17:21:05

标签: python arrays sorting recursion

下面是检查给定数组是否已排序的代码。尝试在各个阶段输入打印命令以逐​​行理解代码,但无济于事。

def sort(a):

    if len(a) == 1:
       return True
    return a[0] <= a[1] and isSorted(a[1:])

a =[127,220,246,277,321,454,534,565,933]

print(sort(a))

首先
这是一个错误

  

NameError:name&#39; isSorted&#39;没有定义。

第二
整个代码似乎是一个简写。之后没有其他的,为什么isSorted只从索引位置1看。这应该是一个递归函数,不能看到一个。

2 个答案:

答案 0 :(得分:1)

您的函数名称是sort而不是isSorted,当您编写print(sort(a))时,您没有返回数组,而是检查此数组是否已经排序。

你应该这样做:

def sort(a):
    if len(a) == 1:
        return True
    return a[0] <= a[1] and sort(a[1:])

a =[127,220,246,277,321,454,534,565,933] 
print(sort(a))

和输出:

True
  

第二 - 整个代码似乎是一个简写。之后别无他人   如果,为什么isSorted只从索引位置1看。这是   应该是一个递归函数,不能看到一个。

您不需要其他声明。 并且如果从索引位置1开始,因为它检查数组是否在索引0中排序,并且在数组上递归索引1。 代码转到最后一个索引,直到长度为1,然后递归返回,以检查是否a[0] <= a[1]。你应该在递归上练习更多。

答案 1 :(得分:1)

你可以试试这个:

def is_sorted(array):
   if not array[1:]:
       return True
   if array[0] <= array[1]:
       return is_sorted(array[1:])
   return False

print(is_sorted([56, 100, 234, 250, 300]))
print(is_sorted([506, 100, 24, 250, 300]))

输出:

True
False