2013-07-24 27 views
1

我想排序4個數字,並且不使用任何內置函數。 這是我在某些情況下工作的。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) 
+3

我能問你爲什麼這麼做嗎? – keyser

+2

查看氣泡排序...這可能是最簡單的排序......這只是一個爛攤子...... –

+1

如果你只是想直接使用任何內置函數進行排序,我建議你看看如何其中一些功能已經實施。 – keyser

回答

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 

我想反正...

+0

是的。 '[4,3,10,1]' - >'[1,3,4,10]'。測試用例由我隨機選擇。僞。 – keyser

+0

但'範圍'和'len'內置函數:) – SethMMorton

+0

我很確定他的意思是排序函數 –

0

你可能會尋找optimal sorting network 4號。

還有更多的細節(在c)Standard sorting networks for small values of n和更基本的介紹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] 

但我真的需要衝並沒有測試過...

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] 

然而,它確實使用lenrange這是內置的...