You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用Bubble Sort对TXT文件数据按姓氏字母排序

解决按姓氏冒泡排序的问题

我来帮你搞定这个问题!你的代码目前的核心问题是没有正确解析文件里的每行数据,反而把整个文件内容当成一个字符串来对单个字符排序,这完全偏离了按姓氏排序的目标。咱们一步步来修正:

你的代码存在的问题

  • 重复定义了first、last、address列表,属于冗余代码,没有实际作用
  • 使用f.read()把整个文件读成一个字符串,后续的排序操作只是在对字符串的单个字符做比较交换,完全不是按行按姓氏排序
  • 没有将每行数据拆分成对应的名字、姓氏、地址字段,无法针对姓氏进行排序逻辑处理

正确的实现步骤与代码

我们需要先把文件里的每行数据解析成包含名字、姓氏、地址的结构化数据,再用冒泡排序基于姓氏的字母顺序对这些数据行排序。

# 初始化列表存储所有人员数据
people = []

# 读取文件并解析每行数据
with open('/Users/calebcalter/Desktop/sorting.txt', 'r') as f:
    # 逐行读取文件
    for line in f:
        # 去掉每行末尾的换行符,然后按逗号分割成三个字段
        # strip()处理可能的首尾空格,split(',')分割时保留字段内的空格(比如地址里的空格)
        first_name, last_name, address = line.strip().split(',')
        # 将解析后的数据添加到列表中,把姓氏放在第一个位置,方便排序时直接比较
        people.append( (last_name.strip(), first_name.strip(), address.strip()) )

# 实现冒泡排序:按姓氏的字母顺序排序
n = len(people)
for i in range(n):
    # 标记是否发生交换,无交换说明已排序完成,可提前结束
    swapped = False
    # 每次遍历到未排序的最后一个元素前
    for j in range(0, n-i-1):
        # 比较当前元素和下一个元素的姓氏
        if people[j][0] > people[j+1][0]:
            # 交换两个元素的位置
            people[j], people[j+1] = people[j+1], people[j]
            swapped = True
    # 本轮无交换则跳出循环,优化排序效率
    if not swapped:
        break

# 输出排序后的结果
print("按姓氏字母排序后的列表:")
for person in people:
    # 按原格式输出:名字,姓氏,地址
    print(f"{person[1]},{person[0]},{person[2]}")

# 可选:将排序后的结果写回新文件
with open('/Users/calebcalter/Desktop/sorted_sorting.txt', 'w') as f:
    for person in people:
        f.write(f"{person[1]},{person[0]},{person[2]}\n")

代码说明

  1. 文件解析:用with语句安全打开文件,逐行读取并拆分字段,同时清理字段前后的多余空格
  2. 数据存储:把每行数据存为元组,将姓氏放在首位,方便排序时直接索引比较
  3. 冒泡排序优化:加入swapped标记,提前终止已有序的循环,提升运行效率
  4. 结果输出:按原数据格式打印排序后的内容,也可以选择写入新文件保存结果

用你提供的示例数据测试,运行后会得到按姓氏字母顺序排序的结果:

Dex,Brooks,94 Sunny Cir.
Dayn,Overton,45 Ashton Way
Maxine,Pierson,876 Kiwi St.
Candi,Robertson,25 Lake View
Fanny,York,71 Luck Ln.

内容的提问来源于stack exchange,提问作者CalebCal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:45:36