繁体   English   中英

带有嵌套(高分)列表的气泡排序错误-Python

[英]Bubble sort error with nested (high scores) list - python

对于我的软件主要工作,我必须创建一个程序。 总而言之,高分列表需要先进行排序,然后才能写入文件。 为此,我使用的是冒泡排序,而不能使用内置的排序功能。 读取数据的文本文件存储在嵌套列表中。 文本文件如下所示:

NameOne
10
NameTwo
15
NameThree
9

这是我有的冒泡排序代码,但是不起作用:

b_not_sorted = True
while b_not_sorted:
    counter = 0
    b_not_sorted = False
    for counter in range(len(highest_scores) - 1):
        if highest_scores[counter] < highest_scores[counter + 1]:
            b_not_sorted = True
            highest_scores[counter], highest_scores[counter+1] = highest_scores[counter+1], highest_scores[counter]
        counter = counter + 1

我需要分数从最高到最低排序。 任何帮助将不胜感激,您将在我的计划学分中得到适当的认可:)。 谢谢。

这里有一个提示:

检查您的外部while循环正在运行多少次。 它应该运行不止一次,对吗? 无论什么情况,总是会发生什么导致循环退出?

尝试逐行浏览代码,看看在每个点上会发生什么。

外循环末尾的语句b_not_sorted = False导致外循环仅执行一次后退出。 您需要将该语句移至代码的另一部分。 尝试在b_not_sorted I_still_need_to_go_through_the_list的名称b_not_sortedI_still_need_to_go_through_the_list

显然在第一行:

while I_still_need_to_go_through_the_list:

应该是True,因为您根本没有浏览过该列表。 您不知道它是否正常。

在该行之后:

if highest_scores[counter] < highest_scores[counter + 1]:

当然,然后我们仍然需要再次通过,因为我们只是对列表进行了更改,并且需要确保不需要其他更改。

但是,如果不进行任何更改怎么办? I_still_need_to_go_through_the_list应该为False 嗯。 如果我们在for循环之前放置I_still_need_to_go_through_the_list = False ,那么除非我们对列表进行更改, 否则它将为False ,这正是我们想要的。

您在第一次迭代后立即执行b_not_sorted = False ,但它不应该在那里! 该算法在完成排序之前就停止了。

相反,只有if highest_scores[counter] < highest_scores[counter + 1]才应该使b_not_sorted = True


同样,交换代码在Python中看起来更好。 不用使用temp_var而是这样做:

highest_scores[counter], highest_scores[counter+1] = highest_scores[counter+1], highest_scores[counter]

Python样式指南建议您不要在if语句中编写== True== False 像这样做:

while b_not_sorted:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM