我参加了一些初级课程的作业。我需要帮助排序许多值。我使用输入函数输入4个随机数,然后我必须使用min()和max()函数按照从最低到最高的顺序对4个数字进行排序。这就是我到目前为止所拥有的
first_integer = input("Please enter the first integer: ")
second_integer = input("Please enter the second integer: ")
third_integer = input("Please enter the third integer: ")
fourth_integer = input("Please enter the fourth integer: ")
integers = (first_integer, second_integer, third_integer, fourth_integer)
print ("The integers in increasing order are", sorted((min (integers)) + (max(integers))))
当我尝试运行命令时,它会给出最低值和最高值。我怎样才能解决这个问题。谢谢。
答案 0 :(得分:3)
要使用min
和max
对少量项目进行排序,您可以使用sorting network。这是Wikipedia文章“简介”部分末尾4个项目的示例排序网络的实现。我的代码通过对输入列表的所有24个排列进行排序来验证它的工作原理。
from itertools import permutations
def sort2(a, b):
return min(a, b), max(a, b)
def sort4(a, b, c, d):
a, c = sort2(a, c)
b, d = sort2(b, d)
a, b = sort2(a, b)
c, d = sort2(c, d)
b, c = sort2(b, c)
return a, b, c, d
# Test all permutations
for seq in permutations([1, 2, 3, 4]):
print(seq, sort4(*seq))
<强>输出强>
(1, 2, 3, 4) (1, 2, 3, 4)
(1, 2, 4, 3) (1, 2, 3, 4)
(1, 3, 2, 4) (1, 2, 3, 4)
(1, 3, 4, 2) (1, 2, 3, 4)
(1, 4, 2, 3) (1, 2, 3, 4)
(1, 4, 3, 2) (1, 2, 3, 4)
(2, 1, 3, 4) (1, 2, 3, 4)
(2, 1, 4, 3) (1, 2, 3, 4)
(2, 3, 1, 4) (1, 2, 3, 4)
(2, 3, 4, 1) (1, 2, 3, 4)
(2, 4, 1, 3) (1, 2, 3, 4)
(2, 4, 3, 1) (1, 2, 3, 4)
(3, 1, 2, 4) (1, 2, 3, 4)
(3, 1, 4, 2) (1, 2, 3, 4)
(3, 2, 1, 4) (1, 2, 3, 4)
(3, 2, 4, 1) (1, 2, 3, 4)
(3, 4, 1, 2) (1, 2, 3, 4)
(3, 4, 2, 1) (1, 2, 3, 4)
(4, 1, 2, 3) (1, 2, 3, 4)
(4, 1, 3, 2) (1, 2, 3, 4)
(4, 2, 1, 3) (1, 2, 3, 4)
(4, 2, 3, 1) (1, 2, 3, 4)
(4, 3, 1, 2) (1, 2, 3, 4)
(4, 3, 2, 1) (1, 2, 3, 4)
正如维基百科所提到的,对于少数项目,排序网络比其他排序算法更有效。但是,我的代码比使用Python的内置.sort
方法或sorted
函数慢,因为它们以C速度运行。
答案 1 :(得分:2)
一旦收集了数字列表(转换为整数或浮动,如果适用),您可以通过选择列表中的最大和最小项目,将这些项目添加到2个单独的列表,然后将结果合并到一个列表中来实现排序。 final,sorted,list。
这是一个使用 {/ em> min()
和max()
执行此操作的功能。它就地对给定列表进行排序:
def max_min_sort(l):
_max = []
_min = []
while l:
n = max(l)
_max.insert(0, n)
l.remove(n)
if l:
n = min(l)
_min.append(n)
l.remove(n)
l[:] = _min + _max
>>> numbers = [100, 200, 44, 71]
>>> max_min_sort(numbers)
>>> numbers
[44, 71, 100, 200]
使用max()
或min()
之一也可以提高略微的效率。使用min()
的示例:
def min_sort(l):
result = []
while l:
n = min(l)
result.append(n)
l.remove(n)
l[:] = result
答案 2 :(得分:1)
@idjaw是正确的,这里不需要min
和max
,只需使用sorted
。但是,如果您不允许使用sorted
,则以下代码将是一个解决方案。
first_integer = input("Please enter the first integer: ")
second_integer = input("Please enter the second integer: ")
third_integer = input("Please enter the third integer: ")
fourth_integer = input("Please enter the fourth integer: ")
integers = [first_integer, second_integer, third_integer, fourth_integer]
result = []
for i in range(len(integers)):
result.append(min(integers))
integers.remove(min(integers))
print ("The integers in increasing order are", result)