2016-12-20 5 views
-2

У меня есть двумерный список, который я должен сортировать, и я должен использовать только циклы. Пока мой код не работает для всех списков.Сортировка списка без встроенных функций, таких как сортировка, установка, мин, макс, удаление в python

def sort(list): 
    i = 0 
    j = 0 
    while i < len(list): 
     while j < len(list[i]) - 1: 
      if list[i][j] > list[i][j + 1]: 
       temp = list[i][j] 
       list[i][j] = list[i][j + 1] 
       list[i][j + 1] = temp 
      j += 1 
     j = 0 
     i += 1 
    return list 
sort([[3,5,2,8,6,9],[9,1,2,5]]) 

Этот код по-прежнему имеет номера не в порядке. Есть ли лучший способ сортировки?

+0

Добро пожаловать в StackOverflow. Прочтите и следуйте инструкциям по отправке в справочной документации. [Минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve) применим здесь. Мы не можем эффективно помочь вам, пока вы не опубликуете свой код и не сможете точно описать проблему. В частности, что вы получили, и чего вы ожидаете? Кажется, что этот код сортирует каждый список независимо. – Prune

+0

http://python3.codes/popular-sorting-algorithms/ – acushner

ответ

2

Ваш внутренний цикл занимает всего один проход по списку. Это гарантирует, что самый большой элемент в конце, но не обязательно делает anythign else. Вам нужно добавить цикл, чтобы продолжить, пока у вас еще есть незавершенный бизнес.

Я оставил в операторах трассировки, которые я использовал, чтобы выделить проблему, а также простой случай обратного порядка.

def sort(list): 
    i = 0 
    j = 0 
    while i < len(list): 
     done = False 
     while not done: 
      done = True 
      while j < len(list[i]) - 1: 
       print i, j, list[i][j], list[i][j + 1] 
       if list[i][j] > list[i][j + 1]: 
        temp = list[i][j] 
        list[i][j] = list[i][j + 1] 
        list[i][j + 1] = temp 
        done = False 
        print "SWAP", list[i] 
       j += 1 

      j = 0 

     i += 1 
    return list 

print sort([[6, 5, 4, 3, 2, 1, 0]]) 
print sort([[3,5,2,8,6,9],[9,1,2,5]]) 
Смежные вопросы