使用插入排序对输入数据进行排序

时间:2016-04-27 11:15:53

标签: python python-2.7 insertion-sort

我正在尝试使用插入排序对输入文件中的数据进行排序,但代码似乎不起作用!我复杂了吗?任何帮助将不胜感激!

input_file = open('C:\\Users\\Desktop\\data.txt', 'r') 
for line in input_file:
    print line

def insertion_sort(items):
    for i in range (1, len(items)):
        j=i
        while j>0 and items[j]<items [j-1]:
            temp = items[j]
            items [j]=items[j-1]
            items [j-1]=temp
            j=j-1

insertion_sort(input_file)
print 'After sorting:', input_file

input_file.close()

3 个答案:

答案 0 :(得分:3)

您传递给insertion_sort的内容是文件对象。它看起来好像你的insertion_sort函数需要更像 list 的东西,它的内容可能会混乱。

文件对象是&#34;可迭代的&#34;,其中(除其他外)意味着你可以从其内容中列出一个列表:list(input_file)将是一个列表,每行一个元素文件。但请注意,迭代线 - 就像你在开始时做的那样 - 移过它们,并且在打印完所有行list(input_file)之后将是一个空列表。因此,如果您想从文件中创建一个列表,则应在打开文件后立即执行此操作。

更改列表不会更改文件的内容。如果你想这样做,你需要再次写出来。

答案 1 :(得分:0)

通过查看您的代码,我猜它在排序列表中没有输出任何内容,原因很简单,因为您已经耗尽了生成器从文件中返回行以按未排序顺序打印它。

将行存储在列表中并对其进行迭代以进行打印,然后您仍可以稍后重复使用该列表进行处理。

input_file = open('C:\\Users\\Desktop\\data.txt', 'r') 
input_lines = input_file.readlines()

for line in input_lines:
    print line

insertion_sort(input_lines)

答案 2 :(得分:0)

您可以尝试这样的事情:

#use 'with' statement so context manager will handle possible exceptions and close file
with open('C:\\Users\\Desktop\\data.txt', 'r'):
    def insertion_sort(sort_list):
        for i in range(0, len(sort_list)):
            j = i
            while j > 0 and sort_list[j - 1] < sort_list[j]:
                #some sugar to avoid temp variable
                sort_list[j - 1], sort_list[j] = sort_list[j], sort_list[j - 1]
                j = j - 1

    #make a list of file iterator
    list_to_sort = list(input_file)
    print 'Before:', list_to_sort
    insertion_sort(list_to_sort)
    print 'After:', list_to_sort

正如上面的答案中提到的那样,当你打开文件时,你会得到一个迭代器。如果你想要一个可以玩的对象(修改它的内容),你肯定可以列出这个迭代器。当你以只读模式打开文件时,你无法在那里写出我们函数的结果。如果您需要将结果写回您的文件,您应该在&#39; r +&#39;中打开它。模式为&#39; r&#39;是只读的。