带嵌套(高分)列表的冒泡排序错误 - python

时间:2012-06-13 09:41:09

标签: python python-2.7 bubble-sort

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

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

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

2 个答案:

答案 0 :(得分:5)

这是一个提示:

检查外部while循环运行的次数。它应该运行不止一次,对吗?什么总是会导致循环退出,无论如何?

尝试逐行检查代码,看看每一点都会发生什么。

外部循环结束时的语句b_not_sorted = False导致外部循环在仅执行一次后退出。您需要将该语句移动到代码的另一部分。尝试将b_not_sorted的名称更改为I_still_need_to_go_through_the_list

显然在第一行:

while I_still_need_to_go_through_the_list:

它应该是真的,因为你根本没有超过列表。你不知道它是否有序。

并在行之后:

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

当然,我们仍然需要再次传递,因为我们只是对列表进行了更改,并且需要确保不需要进一步更改。

但如果没有改变怎么办? I_still_need_to_go_through_the_list应为False。嗯。如果我们在I_still_need_to_go_through_the_list = False循环之前将for放在之前,那么它将是False ,除非我们对列表进行了更改,正是我们想要的。

答案 1 :(得分:0)

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

您只应b_not_sorted = True if highest_scores[counter] < highest_scores[counter + 1]


此外,交换代码在Python中看起来更好。而不是使用temp_var只需执行此操作:

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

Python样式指南建议您不要在== True语句中写== Falseif。这样做:

while b_not_sorted: