Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅使用条件(无数组)对4个数字进行排序_Python_Sorting_Conditional - Fatal编程技术网

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

Python 如何仅使用条件(无数组)对4个数字进行排序,python,sorting,conditional,Python,Sorting,Conditional,我的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

我的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
……等等


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

你可以实现一个硬编码的冒泡排序

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
有一种方法可以做到这一点…

少做一次比较:

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

如果你有足够的时间你也可以试试蛮力

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)

搜索“排序网络”。我想这有一些版本更短。
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)