Неправильная сортировка пузырьков в python - PullRequest
2 голосов
/ 09 февраля 2020

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

N = [80000, 20, 40 , 50, 10000, 50, 60, 90, 100, 5000, 22]
for i in range(len(N)-1):
    for j in range(len(N)-i-1):
        if(N[i] > N[i+1]):
            N[i], N[i+1] = N[i+1], N[i]
print(N)

Это результат этого кода

[20, 40, 50, 10000, 50, 60, 90, 100, 5000, 22, 80000]

Ответы [ 3 ]

3 голосов
/ 09 февраля 2020

Вы должны сравнить N[j] с N[j+1], потому что вам нужно многократно менять смежные elements, если они находятся в неправильном порядке.

N = [80000, 20, 40 , 50, 10000, 50, 60, 90, 100, 5000, 22]
for i in range(len(N)-1):
    for j in range(len(N)-i-1):
        if(N[j] > N[j+1]):
            N[j], N[j+1] = N[j+1], N[j]
print(N)

Выход

[20, 22, 40, 50, 50, 60, 90, 100, 5000, 10000, 80000]
3 голосов
/ 09 февраля 2020

Вы должны использовать «j» вместо «i» в теле второго l oop. Иначе бессмысленно иметь обе петли. Эффективно выполняется только внешнее l oop.

2 голосов
/ 09 февраля 2020

Я полагаю, вы перепутали свои индексы i и j. Должно читаться:

N = [80000, 20, 40 , 50, 10000, 50, 60, 90, 100, 5000, 22]
for i in range(len(N)-1):
for j in range(len(N)-i-1):
    if(N[j] > N[j+1]):
        N[j], N[j+1] = N[j+1], N[j]
print(N)

Вывод:

[20, 22, 40, 50, 50, 60, 90, 100, 5000, 10000, 80000]
...