1

我正在尝试对 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)
4

3 回答 3

1
def bubble_sort(a_list):
    changed = True
    while changed:
        changed = False
        for i in range(len(a_list)-1):
            if a_list[i] > a_list[i+1]:
                 changed = True
                 a_list[i],a_list[i+1] = a_list[i+1],a_list[i]
    return a_list

反正我觉得...

于 2013-07-24T23:49:51.140 回答
1

就地插入排序

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]

但是它确实使用len并且range是内置的......

于 2013-07-25T03:23:29.467 回答
0

您可能正在寻找4 个数字的最佳排序网络。

对于 n 的小值和更基本的介绍在标准排序网络中有更多细节(在 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]

但我真的需要冲刺并且没有测试过......

于 2013-07-25T01:59:43.687 回答