冒泡排序不能产生所需的输出

时间:2017-10-17 09:46:59

标签: python python-3.x sorting bubble-sort

import csv

names = []
scores = []

length = 0

with open('table.csv') as csvfile:
    read = csv.reader(csvfile, delimiter = ',')
    for row in read:
        name = row[0]
        score = row[1]
        length = length + 1
        names.append(name)
        scores.append(score)


print(names)
print(scores) #printing unsorted list

#using bubble sort
done = 0

while done != 1:
    done = 1
    for i in range(length - 1):
        if scores[i] > scores[i +1]:
        scores[i],scores[i+1] = scores[i + 1], scores[i]
        names[i],names[i+1] = names[i + 1], names[i]
        done = 0
print("")

print(names)
print(scores)

Click here to access image that shows the output of the code

此代码旨在打印出我正在开发的游戏的高分表。 我知道使用冒泡排序是非常低效的,但我现在只是尝试一下。 所以基本上代码的问题是它命令它们,但如果数量大于100,000,它似乎跳过最后的零并按顺序放置,好像它是10000 我认为循环次数可能有问题,或者可能超过100000通常被写成100,000乱用csv文件,但老实说我不知道​​。

4 个答案:

答案 0 :(得分:1)

问题在于,在阅读csv文件时,您会获得字符串。然后,冒泡排序正在进行词典排序,而不是您正在寻找的数字排序。

要修复它,将分数类型转换为int(假设分数为整数),如下所示

score = int(row[1])

然后它应该正常工作。

答案 1 :(得分:1)

if声明中,您比较了strings,而不是int。尝试替换

if scores[i] > scores[i +1]:

if int(scores[i]) > int(scores[i +1]):

答案 2 :(得分:0)

数字存储为字符串,导致您的排序将所有1作为第一个而不是整数值

答案 3 :(得分:0)

我认为这是因为他们正在处理字符串值而不是数字(例如整数)。因此,对第一个字符进行比较,在100,000的情况下是“1”。例如,通过该逻辑,55,000大于100,000,因为5大于1。

希望这有帮助,让我知道它是怎么回事!