Использование Bubble Sort - PullRequest
0 голосов
/ 16 мая 2019

Я хочу создать программу, которая сортирует массив, используя метод пузырьковой сортировки, но происходит только первая итерация. Мне нужна помощь, чтобы понять, почему это происходит.

a=[10,4,5,2,0,6]
def srt(element):
    element1=element[:]
    element2=element[:]
    idx=1
    for x in element:
        for y in element2[idx:]:
             if x>y:
                element1[idx]=x
                element1[idx-1]=y
                print(element1)
                idx+=1
             else:
                pass 

Я хочу показать все шаги вида

1 Ответ

2 голосов
/ 16 мая 2019

Ваш код семантически неверен. Вы не сравниваете соседние элементы.

ваш код ...

for x in element:
            for y in element2[idx:]:
                 if x>y:

будет сравнивать первый элемент списка со всеми остальными элементами в списке, начиная с idx.

Пузырьковая сортировка работает путем сравнения соседних элементов и «всплытия» самого большого / наименьшего элемента до конца списка на каждом проходе.

Этот код, найденный на сайте interactivepython.org, работает путем итерации от начала списка до (len of list) - (number of iterations), поэтому при первом проходе он выделяет самый большой элемент в конец списка. На втором проходе он помещает второй по величине элемент со второй на последнюю позицию в списке ... и так далее.

def bubbleSort(alist):
    for passnum in range(len(alist)-1,0,-1):
        for i in range(passnum):
            if alist[i]>alist[i+1]:
                temp = alist[i]
                alist[i] = alist[i+1]
                alist[i+1] = temp

https://interactivepython.org/runestone/static/pythonds/SortSearch/TheBubbleSort.html

...