Быстрая сортировка не рекурсивная
В заявлении говорится:
Напишите нерекурсивную (отрицательную) функцию, которая с учетом списка целых (возможно, неупорядоченных) функций возвращает тот же список с отрицательными числами в положительную голову и обратно (независимо от порядка между ними). Этот алгоритм может быть решен в форме запроса аналогичной стратегии (хотя и немного более простой) разбиения в быстрой сортировке.
Я поставил этот код:
def negatius(a):
fin = len(a) - 1
i = 0
b = [i]
for i in range(len(a)):
if a[i] < 0:
b[fin] = a[i]
i += 1
else:
b[fin] = a[i]
fin += 1
print "La llista és",b[fin]
a=[1,-2,3,-4,-3,5,6]
negatius(a)
И появляется ошибка: локальная переменная 'i' указана перед присваиванием. Я не понимаю этого
1 ответ
Вы увеличиваете fin
от самого высокого индекса и используйте его для доступа к элементам в списках с этим индексом. это не может быть правдой, так как эти показатели не существуют.
b[fin] = a[i]
а также
b[fin] = a[i]
fin += 1
а также
print "La llista és",b[fin]
Кроме того, если и в других случаях вы добавляете в список. Это тоже имеет большой смысл. Вы должны добавить один раз и добавить в другом случае
def negatius(a):
fin = len(a) - 1
i = 0
b = [i]
for i in range(fin):
if a[i] < 0:
b = [a[i]] + b # prepend a to b
else:
b += [a[i]] # append a to b
print "La llista és",b
a=[1,-2,3,-4,-3,5,6]
negatius(a)
печать
La llista és [-3, -4, -2, 0, 1, 3, 5]
обратите внимание, что вы добавляете 0 в список, я сомневаюсь, что это нормально.