【问题标题】:Outputting Bubble sorting输出冒泡排序
【发布时间】:2016-02-18 05:18:41
【问题描述】:

我有一个名为 countries.txt 的列表,其中列出了所有国家/地区的名称、面积(以 km2 为单位)、人口(例如 ["Afghanistan", 647500.0, 25500100])。

def readCountries(filename):

    result=[]
    lines=open(filename)

    for line in lines:
        result.append(line.strip('\n').split(',\t'))
    for sublist in result:
        sublist[1]=float(sublist[1])
        sublist[2]=int(sublist[2])

我正在尝试根据每个国家的地区使用冒泡排序对列表进行排序:

>> c = countryByArea(7)
>>> c 

>>["India",3287590.0,1239240000]

当输入参数时应该返回第 n 个最大的区域。

我有这个但是不知道怎么输出信息

def countryByArea(area):
    myList=readCountries('countries.txt')

    for i in range(0,len(list)):
        for j in range(0,len(list)-1):
            if list[j]>list[j+1]:
                temp=list[j]
                list[j]=list[j+1]
                list[j+1]=temp

【问题讨论】:

  • 冒泡排序有什么原因吗?
  • print 会打印一些东西......想象一下......我很确定冒泡排序想要一个标志来告诉它是否已排序......事实上我很确定这不会正确排序跨度>
  • @cricket_007 显然这是某种任务......可能是为了教他们基本的排序算法,他们不会在面试之外使用......
  • 是的,第二个代码块不起作用 - list 是 python 中的函数名,range 拼写错误,myList 从未使用或从“readCountries”返回跨度>

标签: python bubble-sort


【解决方案1】:

首先,实现一个通用的冒泡排序方法。这是一个正确的冒泡排序算法实现......我相信你可以在http://rosettacode.org找到其他实现

def bubble_sort(a_list,a_key):
    changed=True
    while changed:
        changed = False
        for i in range(len(a_list)-1):
            if a_key(a_list[i]) > a_key(a_list[i+1]):
                a_list[i],a_list[i+1] = a_list[i+1],a_list[i]
                changed = True

然后简单地传递一个代表您想要排序的数据的键函数(在这种情况下,每行的中间值或索引之一

import csv    
def sort_by_area(fname):
     with open(fname) as f:
        a = list(csv.reader(f))
     bubble_sort(a,lambda row:int(row[1]))
     return a

a = sort_by_area("a_file.txt")    
print a[-7] #the 7th largest by area

你可以把这些信息结合起来完成你的作业……但实际上,这是一个你应该向同学或老师寻求帮助的问题……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 2021-06-05
    • 2023-04-07
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多