Python Подсчет обменов в сортировке выбора - PullRequest
0 голосов
/ 29 мая 2018

Я прошу прощения, потому что это мой первый вопрос на этом сайте, и он очень простой, но я несколько потерян в текущей лаборатории, которую пытаюсь завершить.

В настоящее время я пытаюсь подсчитать количество обменов (или обменов? Не уверен в правильном слове!) Во время сортировки выбора во всех проходах.

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

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

Причина, по которой я считаю их независимо, заключается в том, что я показываю, когда происходит своп, а затем общая суммаиз всех свопов.Что я нахожу немного ироничным, поскольку с сортировкой выбора у вас может быть только 1 своп за проход?

В любом случае, я прошу прощения за довольно простой вопрос, но я, кажется, что-то упустил, поэтому я надеялся, что кто-то может указать мне правильное направление, если я должен сосредоточиться на внешнем цикле, чтобы определить обмены?

print( "Original list:" , a_list, "\n" )
count =1   
n = len(a_list)
comp = n -1
exchanges=1
comp_total=0
exch_total=0

for end in range(n, 1, -1):      # Each pass starts here
    #Setting our running total to adjust for previous value.
    comp_total +=comp-(count-1)
    print("Pass", count, ":", "Comparisons:",comp-(count-1), "\tExchanges:", exchanges,"\n", end="\t ")
    count += 1
    # --- Search for Largest ---
    min_position = 0

    for i in range(1, end):
        if a_list[i] > a_list[min_position]:   # Perform n
            min_position = i
            exchanges = 0
            exch_total +=1

        else:
            exchanges = 1






    # --------------------------

    temp = a_list [end - 1]        # Perform exchange
    a_list [end - 1] = a_list [min_position]
    a_list [min_position] = temp
    print(a_list)
    print()

print("\tTotal Comparisons:",comp_total, "Total Exchanges:", exch_total)

selection_sort (a_list)

1 Ответ

0 голосов
/ 30 мая 2018

В этом случае,

Моя проблема заключалась в том, что мой оператор печати был до фактического цикла, это сбрасывало мой счет, поместив оператор if после этой точки, я смог получитьТочный промежуточный итог!

Ура!

...