Пузырьковая сортировка с указателями, используя Python - PullRequest
0 голосов
/ 29 февраля 2020

Код не работает для некоторых тестовых случаев.

def bubbleSort(array):
    l = 0
    r = 1
    isSorted = False
    while not isSorted:
        isSorted = True
        while r <= len(array)-1:
            if array[r] < array[l]:
                swap(l, r, array)
                isSorted = False
            l += 1
            r += 1
    return array

def swap(i, j, array):
    array[i], array[j] = array[j], array[i]
    return

Может кто-нибудь помочь мне решить эту проблему ??

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Что касается вашего кода, вы должны l oop через все элементы каждый раз, когда isSorted равно False. Таким образом, вы должны инициализировать l = 0 и r = 1 каждый раз, когда выполняется внешний while l oop.


Нет необходимости использовать две переменные счетчика l & r, вы можете просто реализовать пузырьковую сортировку следующим образом:

def bubbleSort(array):
    isSorted = False
    while not isSorted:
        isSorted = True
        for i in range(1, len(array)):
            if array[i] < array[i - 1]:
                swap(i, i - 1, array)
                isSorted = False
    return array

def swap(i, j, array):
    array[i], array[j] = array[j], array[i]
    return

И когда вы выполните >>>print(bubbleSort([10, 2, 1, 3, 2, 6, 25]))

Вывод будет:

[1, 2, 2, 3, 6, 10, 25]
0 голосов
/ 29 февраля 2020

Вам нужно переинициализировать r и l обратно на r = 1 и l = 0 внутри while not isSorted:. В противном случае вы бы выполняли полный l oop только один раз, поскольку в конце первой итерации r уже находится на len(array)

...