2013-07-24 2 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

Yup. '[4,3,10,1]' -> '[1,3,4,10]'. Случайный случай, выбранный мной. Псевдо. – keyser

+0

Но 'range' и' len' встроены в функции :) – SethMMorton

+0

im довольно уверен, что он имел в виду функции сортировки –

0

вы можете искать для optimal sorting network для 4 чисел.

Более подробная информация (см. С.) На Standard sorting networks for small values of n и более базовое введение here.

К сожалению, я не могу найти реализацию python для случая n = 4. но вопрос связан выше, содержит:

 - 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

Inplace сортировка вставка

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 которые являются встроенными. ..

Смежные вопросы