Bubble Sort Домашнее задание - PullRequest
128 голосов
/ 22 мая 2009

В классе мы выполняем алгоритмы сортировки, и, хотя я прекрасно понимаю их, когда говорю о них и пишу псевдокод, у меня возникают проблемы при написании реального кода для них.

Это моя попытка в Python:

mylist = [12, 5, 13, 8, 9, 65]

def bubble(badList):
    length = len(badList) - 1
    unsorted = True

    while unsorted:
        for element in range(0,length):
            unsorted = False
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                print badList
            else:
                unsorted = True

print bubble(mylist)

Теперь, это (насколько я могу судить) сортирует правильно, но как только оно завершается, оно просто зацикливается бесконечно.

Как исправить этот код, чтобы функция правильно и правильно завершила сортировку списка любого (разумного) размера?

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

Ответы [ 22 ]

0 голосов
/ 21 марта 2018

def bubbleSort(a): def swap(x, y): temp = a[x] a[x] = a[y] a[y] = temp #outer loop for j in range(len(a)): #slicing to the center, inner loop, python style for i in range(j, len(a) - j):<br> #find the min index and swap if a[i] < a[j]: swap(j, i) #find the max index and swap if a[i] > a[len(a) - j - 1]: swap(len(a) - j - 1, i) return a

0 голосов
/ 22 мая 2009

Ответы, предоставленные the-fury и Martin Cote, устранили проблему бесконечного цикла, но мой код все равно не работал бы правильно (для большого списка он не будет сортироваться правильно.). В итоге я отказался от переменной unsorted и использовал вместо нее счетчик.

def bubble(badList):
    length = len(badList) - 1
    n = 0
    while n < len(badList):
        for element in range(0,length):
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                n = 0
            else:
                n += 1
    return badList

if __name__ == '__main__':
    mylist = [90, 10, 2, 76, 17, 66, 57, 23, 57, 99]
    print bubble(mylist)

Если бы кто-нибудь мог предоставить какие-либо указания о том, как улучшить мой код в комментариях, это было бы очень признательно.

...