如何仅使用条件(无数组)对 4 个数字进行排序

问题描述 投票:0回答:4

我的 Python 入门课程遇到了一些问题。我们的任务是按降序对四个整数输入进行排序,然后程序还应指示您在输入中键入的顺序。

例如: 输入:5、10、3、3 输出: (1) 第二个输入 (2) 第一个输入 (3) 第三、第四个输入

唯一的问题是我们不应该使用数组或内置排序函数,而只能使用条件。

我们已经在课堂上完成了前半部分代码。这是我们所做的排序算法的示例:

# user enters a, b, c, d
if a > b:
    two = a
    one = b
if c > d:
    four = c
    three = d
if two > four:
    handle = three
    three = four
    four = two
    two = handle

...等等。

我不知道如何从那里继续。问题是执行上面的代码会忘记原始输入的顺序,因为您分配了新值。对我在这里缺少什么有什么想法吗?

python sorting conditional-statements
4个回答
6
投票

您可以实现硬编码的冒泡排序

if a > b: b, a = a, b
if b > c: c, b = b, c
if c > d: d, c = c, d
if a > b: b, a = a, b
if b > c: c, b = b, c
if a > b: b, a = a, b

2
投票
one,two,three,four = [random.random() for _ in range(4)]
changed = 1
while changed:
  changed = 0
  if one > two:
     one,two = two,one
     changed = 1
  if two > three:
     two,three = three,two
     changed = 1
  if three > four:
     three,four = four,three
     changed = 1

这是你可以做到的一种方法...


2
投票

少一个比较,这对于固定系列的条件交换来说是最佳的

if a > b: a, b = b, a if c > d: c, d = d, c if a > c: a, c = c, a if b > d: b, d = d, b if b > c: b, c = c, b
    

0
投票
如果你有足够的时间也可以尝试一下暴力破解,

def mymax(a, b, c): if a > b: if a > c: return a else: return c else: if b > c: return b else: return c def sort(p, q, r, s): maximum = mymax(p, q, r) if maximum > s: first_max = maximum if first_max == p: maximum = mymax(q, r, s) second_max = maximum if second_max == q: if r > s: return first_max, second_max, r, s else: return first_max, second_max, s, r elif second_max == r: if q > s: return first_max, second_max, q, s else: return first_max, second_max, s, q elif second_max == s: if q > r: return first_max, second_max, q, r else: return first_max, second_max, r, q elif first_max == q: maximum = mymax(p, r, s) second_max = maximum if second_max == p: if r > s: return first_max, second_max, r, s else: return first_max, second_max, s, r elif second_max == r: if p > s: return first_max, second_max, p, s else: return first_max, second_max, s, p elif second_max == s: if p > r: return first_max, second_max, p, r else: return first_max, second_max, r, p elif first_max == r: maximum = mymax(p, q, s) second_max = maximum if second_max == p: if q > s: return first_max, second_max, q, s else: return first_max, second_max, s, q elif second_max == q: if p > s: return first_max, second_max, p, s else: return first_max, second_max, s, p elif second_max == s: if p > q: return first_max, second_max, p, q else: return first_max, second_max, q, p else: first_max = s second_max = maximum if second_max == p: if q > r: return first_max, second_max, q, r else: return first_max, second_max, r, q elif second_max == q: if p > r: return first_max, second_max, p, r else: return first_max, second_max, r, p elif second_max == r: if p > q: return first_max, second_max, p, q else: return first_max, second_max, q, p print sort(1, 2, 3, 4) print sort(4, 3, 2, 1)
    
© www.soinside.com 2019 - 2024. All rights reserved.