关于数据结构的两个习题

一.冒泡排序

给出一个纯数字列表. 请对列表进行排序
思路:
1. 完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10
2. 循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换. 循环结束的时候. 当前列表中最大的数据就会被移动到最右端.
3. 想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端. 以此类推. 如果反复的进行执行相应的操作. 那这个列表就变成了一个有序列表

# 这个算法可以进行优化.
# 冒泡排序,
lst = [5,1,7,2,6,4,5,6]
count = 0
while count < len(lst): # 控制次数
    i = 0
    while i < len(lst) - 1:
        if lst[i] > lst[i + 1]:
            lst[i], lst[i + 1] = lst[i + 1], lst[i]
        i = i + 1
    count = count + 1
print(lst)


# 排序函数
lst.sort()
print(lst)


# 底层c语言的交换过程
# 交换
# abcdefg = 10
# baddfad = 5
# abcdefg,baddfad = baddfad,abcdefg
# # c = a
# # a = b
# # b = c
# print(abcdefg, baddfad)

二.递归算法

# 递归函数, 自己调用自己
# count = 1
# def func():
#     global count
#     print("超级玛丽", count)
#
#     count = count + 1
#     func()
# func()
# 递归深度. 你可以自己掉用自己的次数,
# 官方文档中递归最大深度是1000. 在这之前就会给你报错

# # 遍历F:\python文件夹, 打印出所有的文件和普通文件的文件名
# import os
# def func(filepath, n): # d:/sylar/
#     # 1,打开这个文件夹
#     files = os.listdir(filepath)
#     # 2. 拿到每一个文件名
#     for file in files:  # 文件名
#         # 3. 获取到路径
#         f_d = os.path.join(filepath, file) # d:/sylar/文件名/
#         # 4. 判断是否是文件夹
#         if os.path.isdir(f_d):
#             # 5. 如果是文件夹. 继续再来一遍
#             print("\t"*n, file,":") # 打印文件名
#             func(f_d, n + 1)
#         else:   #  不是文件夹. 普通文件
#             print("\t"*n, file)
#
# func('F:\python',0)

猜你喜欢

转载自www.cnblogs.com/rixian/p/9482427.html