经典例题

一,冒泡排序

  给出一个纯数字列表. 请对列表进行排序(升级题). 
  思路: 
  1. 完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10
  2. 循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换. 循环结束的时候.

   当前列表中最大的数据就会被移动到最右端. 
  3. 想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端. 以此类推. 如果反

   复的进行执行相应的操作. 那这个列表就变成了一个有序列表.

lst = [88,5,8,6,1,23]
for a in range(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
print(lst)


lis=[12,3,5,8,2,45,1]
for n in range(len(lis)):
    for i in range(len(lis)-1):
        if lis[i]>lis[i+1]:
            lis[i],lis[i+1]=lis[i+1],lis[i]
print(lis)

二,

  写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
  例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置函数)

def func(*args):
    m = args[0] # 假设第0项就是最大值
    mi = args[0]
    for el in args:
        if el > m:
            m = el # 当前这个元素比假设的那个大. 记录当前这个比较大的数
        if el < mi:
            mi = el
    return {"最大值":m, "最小值":mi}

print(func(5,7,12,1,46,87,3))

三,

  有如下值li=[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,

  将小于66的值保存至第二个key的值中(在原有代码上补充不允许改变原有代码)

li = [11,22,33,44,55,77,88,99,90]
result = {}
for row in li:
    if row < 66:
        l = result.get("k1")    # 上来就拿k1
        if l == None:   # k1不存在. 没有这个列表
            result["k1"] = [row]    # 创建一个列表扔进去
        else:   # k1如果存在
            result['k1'].append(row)    # 追加内容
    else:
        l = result.get("k2")  # 上来就拿k1
        if l == None:  # k1不存在. 没有这个列表
            result["k2"] = [row]  # 创建一个列表扔进去
        else:  # k1如果存在
            result['k2'].append(row)  # 追加内容
print(result)

四,

  写代码完成99乘法表

a = 1
while a <=9:

    b = 1
    while b <= a:
        print("%dx%d=%d\t" % (a, b, a*b), end="")
        b = b + 1
    print() # 换行
    a = a + 1

五.递归的应⽤:

我们可以使⽤递归来遍历各种树形结构, 比如我们的⽂件夹系统. 可以使⽤递归来遍历该 ⽂件夹中的所有⽂件

import  os
filePath = "d:\sylar\python_workspace"

def read(filePath, n):
    it = os.listdir(filePath)   # 打开文件夹
    for el in it:
        #  拿到路径
        fp = os.path.join(filePath, el) # 获取到绝对路径
        if os.path.isdir(fp):   # 判断是否是文件夹
            print("\t"*n,el)
            read(fp, n+1)    # 又是文件夹. 继续读取内部的内容 递归入口
        else:
            print("\t"*n,el)    # 递归出口

read(filePath, 0)

六.⼆分查找

判断 n 是否在 lst 中出现. 如果出现请返回 n 所在的位置

第一种:     ⼆分查找---⾮递归算法
lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
n = 567
left = 0
right = len(lst) - 1
count = 1
while left <= right:
    middle = (left + right) // 2
    if n > lst[middle]:
        left = middle + 1
    elif n < lst[middle]:
        right = middle - 1
    else:
        print(count)
        print("存在")
        print(middle)
        break
    count = count + 1
else:
    print("不存在")

第二种:     普通递归版本⼆分法
lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
def binary_search(left, right, n):
    middle = (left + right)//2
    if left > right:
        return -1
    if n > lst[middle]:
        left = middle + 1
    elif n < lst[middle]:
        right = middle - 1
    else:
        return middle
    return binary_search(left, right, n)    # 这个return必须要加. 否则接收
到的永远是None.
print(binary_search(0, len(lst)-1, 65) )


第三种:# 另类⼆分法, 很难计算位置.

lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
def binary_search(lst, n): left = 0 right = len(lst) - 1 middle = (left + right) // 2 if right <= 0: print("没找到") return if n > lst[middle]: lst = lst[middle+1:] elif n < lst[middle]: lst = lst[:middle] else: print("找到了") return binary_search(lst, n) binary_search(lst, 65)

 

转载于:https://www.cnblogs.com/shuai1993/p/9341588.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值