2013-11-22 5 views
0
быстрой сортировка

я получаю ошибкупитона рекурсивный

RuntimeError: maximum recursion depth exceeded 

при выполнении следующего кода:

def partition(lst, start, end): 
    new_lst=lst[start:end] 
    pos=0 
    if len(lst)<2: 
     return None 
    for i in range(len(new_lst)): 
     if new_lst[i] < new_lst[-1]: 
      new_lst[i],new_lst[pos]=new_lst[pos],new_lst[i] 
      pos+=1 

     elif i==(len(new_lst)-1): 
      new_lst[-1],new_lst[pos]=new_lst[pos],new_lst[-1] 

    return pos  

def quick_sort_recursive(lst, start, end): 

    if start<end: 

     pos=partition(lst, start, end) 
     quick_sort_recursive(lst, start, pos-1) 
     quick_sort_recursive(lst, pos+1, end) 

хотел бы, чтобы получить некоторую помощь с этим, спасибо!

+0

Какой объем у вас есть лист? – dlp

+1

Добавьте 'print pos' сразу после' pos = partition (lst, start, end) ', и ваша ошибка станет очевидной. – smassey

+0

список [13,54,3434,88,334,6,8,84,57,4,2,4,6,6] – user3022418

ответ

0

Мое предположение было бы, что вы не модифицируя исходный список ... этот код:

def partition(lst, start, end): 
    new_lst=lst[start:end] 

Возможно, вы думаете, что это просто дает вам представление в первоначальный список, но это на самом деле создает копию , Затем вы разделите его и отправьте назад ... но этот секционированный список просто выброшен.

Вы можете изменить первоначальный список, но вам нужно будет сделать. Простейший способ может быть просто вставить его обратно:

new_lst = lst[start:end] 
    # do some stuff 
    lst[start:end] = new_lst 

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

+0

спасибо, но он не помог: \ – user3022418

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