0

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

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

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

4

2 回答 2

5

这里有一个提示:

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

尝试逐行浏览代码并查看每一点发生的情况。

b_not_sorted = False外循环末尾的语句导致外循环只执行一次就退出。您需要将该语句移动到代码的另一部分。尝试在您的脑海中更改b_not_sortedto的名称: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那时。嗯。如果我们把它I_still_need_to_go_through_the_list = False放在循环之前for那么False 除非我们对列表进行更改,否则这正是我们想要的。

于 2012-06-13T09:52:58.073 回答
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 风格指南建议你不要写== Trueor == Falseinif语句。像这样做:

while b_not_sorted:
于 2012-06-13T09:53:37.667 回答