我正在尝试对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)
答案 0 :(得分: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
无论如何我想......
答案 1 :(得分:0)
您可能正在寻找4个号码的optimal sorting network。
Standard sorting networks for small values of n有更多细节(c),更基本的介绍here。
遗憾的是,我无法找到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]
但我真的需要冲刺并且没有测试过......
答案 2 :(得分:0)
原地插入排序
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
...