【问题标题】:Python Counting the exchanges in a selection sortPython计算选择排序中的交换
【发布时间】:2018-11-07 14:30:03
【问题描述】:

我很抱歉,因为这是我在这个网站上的第一个问题,而且它非常基础,但是我在我正在尝试完成的当前实验室中有些迷失。

目前,我正在尝试在整个通行证的选择排序期间计算交换量(或交换?不确定那里的正确词!)。

现在根据我目前的理解,我们公式的替换部分正在遍历我的列表。但是,它实际上应该向我吐口水的掉期数量增加了一倍。现在这会让我相信 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)

【问题讨论】:

  • 您在哪里进行实际交换?有许多变量没有定义,这使得测试你的代码非常困难,请阅读minimal reproducible example
  • edit您的帖子包含您对问题的任何其他信息。避免在 cmets 中添加它,因为它们更难阅读并且更容易删除。您帖子的edit 按钮就在帖子标签的下方。
  • 我的错,所以 AChampion,只是对我的基本理解的简要说明,if 语句中发生的任何事情都应该只在交换期间发生?正确的?当然,如果它遍历多个较小的值,那也可能会绊倒它……啊哈。

标签: python-3.x swap cumulative-sum selection-sort


【解决方案1】:

在这种情况下,

我的问题是我的打印语句在实际循环之前,这使我的计数超出了我的计数,通过将 if 语句放在这一点之后,我能够获得准确的运行总数!

干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2021-02-06
    相关资源
    最近更新 更多