2016-01-31 4 views
0

Я пытаюсь реализовать Quicksort с помощью Python. Это мой код:Быстрый алгоритм ошибки Python

import random 

def quickSort(lst): 
    randomIndex = random.randint(0,len(lst)-1) 
    pivot = lst[randomIndex] 
    greater = [] 
    less = [] 
    equal = [] 
    if len(lst) > 1: 
     for num in lst: 
      if num > pivot: 
       greater.append(num) 
      elif num == pivot: 
       equal.append(num) 
      else: 
       less.append(num) 
     return quickSort(less)+equal+quickSort(greater) 
    else: 
     return lst 

def main(): 
    lst = [1000000,100000,1000,10000,100,10] 
    sortedLst = quickSort(lst) 
    print("Quicksorted List: ", sortedLst) 

main() 

Почему, когда я запускаю мой код, он говорит, что он работает в этой ошибки:

ValueError: empty range for randrange() (0,0, 0) 
+0

ошибка довольно очевидна explonatory. Вы вызываете случайное значение в пустом диапазоне, поэтому в какой-то момент ваш код вызывает quicksort ([]), и вы пытаетесь получить randomIndex/pivot, даже когда список пуст. – lejlot

+0

Это, скорее всего, потому, что либо 'большее ', либо' less' имеет один элемент в них. Поэтому, когда вы устанавливаете 'randomIndex' в диапазон от 0 до длины списка, вы получаете' random.randint (0, 0) '. Я бы рекомендовал добавить команду 'print' перед вашим оператором' return', чтобы увидеть, как выглядят эти списки. – brittenb

ответ

2

Единственная проблема заключается в том, что вы пытаетесь выбрать randomIndex даже, когда lst пуст, просто переместить инициализацию в if состояние, когда вы уверены, что они не являются пустыми

import random 

def quickSort(lst): 
    if len(lst) > 1: 
     randomIndex = random.randint(0,len(lst)-1) 
     pivot = lst[randomIndex] 
     greater = [] 
     less = [] 
     equal = [] 
     for num in lst: 
      if num > pivot: 
       greater.append(num) 
      elif num == pivot: 
       equal.append(num) 
      else: 
       less.append(num) 
     return quickSort(less)+equal+quickSort(greater) 
    else: 
     return lst 

def main(): 
    lst = [1000000,100000,1000,10000,100,10] 
    sortedLst = quickSort(lst) 
    print("Quicksorted List: ", sortedLst) 

main() 
+0

поблагодарить u MAKES SENSE –

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