2010-12-03 2 views
0

Существует рекурсивный выбор в следующем вопросе, который должен быть сделан.Рекурсивный выбор Сортировка python

def selsort(l): 
    """ 
    sorts l in-place. 
    PRE: l is a list. 
    POST: l is a sorted list with the same elements; no return value. 
    """      

l1 = list("sloppy joe's hamburger place") 
vl1 = l1 

print l1 # should be: """['s', 'l', 'o', 'p', 'p', 'y', ' ', 'j', 'o', 'e', "'", 's', ' ', 'h', 'a', 'm', 'b', 'u', 'r', 'g', 'e', 'r', ' ', 'p', 'l', 'a', 'c', 'e']""" 

ret = selsort(l1) 

print l1 # should be """[' ', ' ', ' ', "'", 'a', 'a', 'b', 'c', 'e', 'e', 'e', 'g', 'h', 'j', 'l', 'l', 'm', 'o', 'o', 'p', 'p', 'p', 'r', 'r', 's', 's', 'u', 'y']""" 
print vl1 # should be """[' ', ' ', ' ', "'", 'a', 'a', 'b', 'c', 'e', 'e', 'e', 'g', 'h', 'j', 'l', 'l', 'm', 'o', 'o', 'p', 'p', 'p', 'r', 'r', 's', 's', 'u', 'y']""" 

print ret # should be "None" 

Я знаю, как получить это с помощью ключа → l.sort(key=str.lower). Но вопрос требует, чтобы я выделил максимальный элемент, а не минимум, только до .append(...) на рекурсивно отсортированном подсписке.

Если бы я мог получить любую помощь, я был бы очень признателен.

+0

Обратите внимание, что вы можете форматировать строки как код, отпечатывая их в четыре пробела. Кнопка «101 \ n010» на панели инструментов редактора делает это за вас. Вы можете отредактировать свой вопрос с помощью ссылки редактирования внизу и отформатировать образец кода. Нажмите оранжевую метку вопроса на панели инструментов редактора, чтобы получить дополнительную информацию и советы по форматированию. – outis 2010-12-03 02:55:43

ответ

0

способ сортировки должен делать то, что вы хотите. Если вы хотите обратное, просто используйте list.reverse()

Если ваша задача - сделать свой собственный метод сортировки, это можно сделать.

Может быть, попробовать что-то вроде этого:

def sort(l): 
    li=l[:]          #to make new copy 
    newlist = []         #sorted list will be stored here 
    while len(li) != 0:       #while there is stuff to be sorted 
     bestindex = -1        #the index of the highest element 
     bestchar = -1        #the ord value of the highest character 
     bestcharrep = -1       #a string representation of the best character 
     i = 0 
     for v in li: 
      if ord(v) < bestchar or bestchar == -1:#check if string is lower than old best 
       bestindex = i      #Update best records 
       bestchar = ord(v) 
       bestcharrep = v 
      i += 1 
     del li[bestindex]       #delete retrieved element from list 
     newlist.append(bestcharrep)    #add element to new list 
    return newlist         #return the sorted list 
2

Зв Вы понимаете проблему?

Давайте посмотрим на то, что вы просили сделать:

извлечь максимальный элемент, а как минимум, только .append (...) его на рекурсивно отсортированный подсписка.

Таким образом, мы делаем следующие вещи:

1) Извлеките максимальный элемент. Вы понимаете, что означает «экстракт»? Вы знаете, как найти максимальный элемент?

2) Рекурсивно сортировать подсписку. Здесь «подписок» состоит из всего остального после того, как мы извлечем максимальный элемент. Вы знаете, как работает рекурсия? Вы просто вызываете свою функцию сортировки снова с помощью подсписок, полагаясь на нее, чтобы выполнить сортировку. В конце концов, целью вашей функции является сортировка списков, так что это должно работать, не так ли? :)

3) .append() максимальный элемент на результат сортировки подсписок. Это не требует объяснений.

Конечно, нам нужен базовый регистр для рекурсии. Когда у нас есть базовый случай? Когда мы не можем выполнить шаги точно так же, как написано. Когда это происходит? Ну, почему было бы так? Ответ: мы не можем извлечь максимальный элемент, если нет элементов, потому что тогда нет максимального элемента для извлечения.

Таким образом, в начале функции мы проверяем, прошел ли нам пустой список. Если бы мы были, мы просто возвращаем пустой список, потому что сортировка пустого списка приводит к пусту. (Вы понимаете, почему?) В противном случае мы переходим к другим шагам.

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