Нестандартный алгоритм сортировки Python - PullRequest
0 голосов
/ 02 октября 2019

У меня есть задание для универа, с которым мне нужна помощь. Нам дали код, который сортирует списки правильно, но не «хорошо продуман». Я не могу найти логический недостаток в том, как это работает. Что-то о цикле n, используя результат цикла m. Вот код:

from random import randint
numbers = [randint(0,9) for x in range(20)] #random array for testing the sort
#sorting
for n in range(0, len(numbers)-1):
    for m in range(n + 1, len(numbers)):
        if numbers[n] > numbers[m]:
            a = numbers[n]
            numbers[n] = numbers[m]
            numbers[m] = a
#correctly sorted list
print(numbers)

Ответы [ 2 ]

0 голосов
/ 02 октября 2019
from random import randint

numbers = [randint(0,9) for x in range(20)]
n = len(numbers)

for i in range(n):
    for m in range(1, n-i):
        # change < to > to reverse the order
        if numbers[m-1] < numbers[m]:
            (numbers[m-1], numbers[m]) = (numbers[m], numbers[m-1])
print(numbers)

Не проверено! Цикл n был исключен из уравнения, но на переменную все еще ссылаются через цикл m. Таким образом, вы используете значение m только для сортировки списка без зависимости от сравнения с n.

0 голосов
/ 02 октября 2019

Этот алгоритм здесь называется Bubble Sort, для какого курса вы получили эту домашнюю работу? если его алгоритмы \ структуры данных, чем я могу придумать проблему, которая может подойти, то с пузырьковой сортировкой является то, что его θ(n^2), что означает, его лучший случай (список уже отсортирован) и худший случай (список отсортирован в обратном направлении)) имеют одинаковую сложность по времени, вы всегда будете делать n^2 пропуски по списку, очевидно, вы можете придумать лучший алгоритм, чтобы уменьшить сложность по времени. (см. Insertion Sort или Merge Sort, чтобы узнать больше)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...