为什么此用于python排序的代码陷入无限循环?

时间:2018-08-27 14:05:58

标签: python sorting random

我想获取一个列表进行排序,并使用python随机库对其进行排序。这样做的策略:

  • 首先,将列表中的任意两个随机索引作为输入
  • 然后交换这两个元素。
  • 检查列表是否已排序。
  • 如果未排序,请再次重复步骤。

我是python的新手。因此对所有技术都不熟悉。请帮助解释。我不知道出了什么问题。

from random import randint

n=int(input())
l=[int(input()) for x in range(0,n)]

p=1

while (1):
  if(p==1):
    ransort(n)
  else:
    break

for x in l:
  print (x)


def ransort(n):
  i=randint(0,n-1)
  j=randint(0,n-1)
  l[i],l[j]=l[j],l[i]

  if l== l.sort():
    p=0
  else:
    p=1
  return p

1 个答案:

答案 0 :(得分:0)

有2个问题:

  1. l.sort()进行就地排序,因此在第二次迭代时将对列表进行排序
  2. 脚本作用域中的“ p”值未更改,因此脚本进入了循环

要避免无限循环,您可以做两件事:

检查返回值

while (p==1):
    p = ransort(n)

或在ransort函数中编辑全局变量值:

def ransort(n):
   i=randint(0,n-1)
   j=randint(0,n-1)
   l[i],l[j]=l[j],l[i]
   global p
   if l== l.sort():
       p=0
   else:
       p=1

这有效:

def ransort(n):
  i=randint(0,n-1)
  j=randint(0,n-1)
  l[i],l[j]=l[j],l[i]
  global p
  if l== l.sort():
    p=0
  else:
    p=1
  return p #here it is

while p == 1:
  p =  ransort(n)