[英]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_sorted
为I_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.