我的疑问是,我的目标是制作一个程序来验证数组中键盘输入的元素是否有序:
n=3
for i in range(n):
x=int(input("Valores: "))
array.append(x)
它不是对列表进行排序,而是在检查列表是否已排序,我尝试过并没有找到解决问题的正确方法。
我的疑问是,我的目标是制作一个程序来验证数组中键盘输入的元素是否有序:
n=3
for i in range(n):
x=int(input("Valores: "))
array.append(x)
它不是对列表进行排序,而是在检查列表是否已排序,我尝试过并没有找到解决问题的正确方法。
面对困难的计算(列表是否已排序?)时,通常的策略是想一个函数来解决它。
在这种情况下,我们构建一个函数,它接收一个列表并返回一个布尔值
True
orFalse
,这取决于列表是否满足被排序的条件(每个元素大于或等于前一个元素)。这个过程很简单:我们从第二个元素开始遍历列表,总是将它与前一个元素进行比较。如果我们发现一个元素乱序,我们改变值以返回并退出循环。
注意:空列表定义为有序。
我们还构建了一些测试用例以确保它有效:
它产生什么:
该功能已经完成并经过测试,您可以在程序中使用它:
编辑
所提出的方法是有序的
O(n)
,即检查列表所花费的时间与列表中元素的数量 n 成正比。在最坏的情况下(当列表排序时),您必须遍历整个列表,这需要 n 步。基于的方法
sort
既慢又低效:首先你必须对列表进行排序,最多排序操作O(n log n)
,再加上比较列表所花费的时间,操作O(n)
. 此外,它们消耗两倍的内存(列表 + 排序副本)。对于简单的案例,差异并不明显,但在现实生活中(包含数千个对象的列表),差异是不可接受的。
您应该首先学习基本算法。不会总有一家书店能让你摆脱困境。
您可以通过一种简单的方式实现它,通过对原始数组进行排序,然后比较原始数组和排序后的数组,如果它们相同,它将被排序,否则您的列表不会排序。
你可以让它适应你想要的。