Быстрая сортировка не рекурсивная

В заявлении говорится:

Напишите нерекурсивную (отрицательную) функцию, которая с учетом списка целых (возможно, неупорядоченных) функций возвращает тот же список с отрицательными числами в положительную голову и обратно (независимо от порядка между ними). Этот алгоритм может быть решен в форме запроса аналогичной стратегии (хотя и немного более простой) разбиения в быстрой сортировке.

Я поставил этот код:

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 в список, я сомневаюсь, что это нормально.

Другие вопросы по тегам