Python 4个数字的手动排序

Python 4个数字的手动排序,python,sorting,math,Python,Sorting,Math,我正在尝试对4个数字进行排序,并且不使用任何内置函数。 这是我所拥有的,在某些情况下是有效的 #sort numbers def sort_n(w, x, y, z): list = [w, x, y, z] while list[3] < list[2]: if list[0] > list[1]: list[0], list[1] = list[1], list[0] if list[1] > l

我正在尝试对4个数字进行排序,并且不使用任何内置函数。 这是我所拥有的,在某些情况下是有效的

#sort numbers

def sort_n(w, x, y, z):
    list = [w, x, y, z]
    while list[3] < list[2]:

        if list[0] > list[1]:
            list[0], list[1] = list[1], list[0]

        if list[1] > list[2]:
            list[1], list[2] = list[2], list[1]

        if list[2] > list[3]:
            list[2], list[3] = list[3], list[2]
    while list[1] < list[2]:

        if list[0] > list[1]:
            list[0], list[1] = list[1], list[0]

        if list[1] > list[2]:
            list[1], list[2] = list[2], list[1]

        if list[2] > list[3]:
            list[2], list[3] = list[3], list[2]

    while list[1] < list[0]:

        if list[0] > list[1]:
            list[0], list[1] = list[1], list[0]

        if list[1] > list[2]:
            list[1], list[2] = list[2], list[1]

        if list[2] > list[3]:
            list[2], list[3] = list[3], list[2]

    print list


sort_n(10, 1, 2, 3)
#排序编号
定义排序n(w,x,y,z):
列表=[w,x,y,z]
而列表[3]<列表[2]:
如果列表[0]>列表[1]:
列表[0],列表[1]=列表[1],列表[0]
如果列表[1]>列表[2]:
列表[1],列表[2]=列表[2],列表[1]
如果列表[2]>列表[3]:
列表[2],列表[3]=列表[3],列表[2]
而列表[1]<列表[2]:
如果列表[0]>列表[1]:
列表[0],列表[1]=列表[1],列表[0]
如果列表[1]>列表[2]:
列表[1],列表[2]=列表[2],列表[1]
如果列表[2]>列表[3]:
列表[2],列表[3]=列表[3],列表[2]
当列表[1]<列表[0]:
如果列表[0]>列表[1]:
列表[0],列表[1]=列表[1],列表[0]
如果列表[1]>列表[2]:
列表[1],列表[2]=列表[2],列表[1]
如果列表[2]>列表[3]:
列表[2],列表[3]=列表[3],列表[2]
打印列表
排序n(10,1,2,3)

我想无论如何

您可能正在寻找4个数字的对应项

有更多的细节(在c)在和更基本的介绍

不幸的是,我找不到适用于n=4情况的python实现。但上面链接的问题包含:

 - 4-input: 3 networks

[[1 2][3 4][1 3][2 4][2 3]]
[[1 3][2 4][1 2][3 4][2 3]]
[[1 4][2 3][1 2][3 4][2 3]]
如果我理解正确,你可以选择任何一行,然后进行这里描述的比较。因此,从第一行开始:

if list[1] > list[2]: list[1], list[2] = list[2], list[1]
if list[3] > list[4]: list[3], list[4] = list[4], list[3]
if list[1] > list[3]: list[1], list[3] = list[3], list[1]
if list[2] > list[4]: list[2], list[4] = list[4], list[2]
if list[2] > list[3]: list[2], list[3] = list[3], list[2]
但我真的需要冲刺,而且还没有测试…

就地插入排序

def isort(a, f):
    for i in range(0, len(a)):
        for j in range(0, i):
            if f(a[i], a[j]):
                a[j], a[i] = a[i], a[j]
    return a
那么你可以这样使用它

>>> isort([2,9,8,3], lambda x, y: x < y) # Ascending order
[2, 3, 8, 9]
>>> isort([2,9,8,3], lambda x, y: x > y) # Descending order
[9, 8, 3, 2]
isort([2,9,8,3],λx,y:x>>isort([2,9,8,3],λx,y:x>y)#降序 [9, 8, 3, 2]
但是,它确实使用了
len
range
这两个内置项…

我可以问一下为什么要这样做吗?查找冒泡排序。。。这可能是最容易实现的类型。。。这简直是一团糟……如果您只是想在不直接使用任何内置函数的情况下进行排序,我建议您看看其中一些函数是如何实现的。您确实意识到,
运算符正在调用整数的内置
\ugt\uu
方法,对吗|你为什么把那些
循环放在那里?他们实际上没有帮助;事实上,他们把你的代码弄错了<代码>[4,3,10,1]
->
[1,3,4,10]
。由我随机选择的测试用例。伪。但是
range
len
是内置函数:)我很确定他指的是排序函数
>>> isort([2,9,8,3], lambda x, y: x < y) # Ascending order
[2, 3, 8, 9]
>>> isort([2,9,8,3], lambda x, y: x > y) # Descending order
[9, 8, 3, 2]