python冒泡排序之参数设置

记得我写第一篇关于冒泡序列的博客时,我就在想,冒泡排序可以正序和倒序,唯一的区别就是将符号换一下。那我如果要两种排序方式都用的话,一样的代码岂不是要写两遍?????不是吧,太麻烦了。 ̄へ ̄ ̄へ ̄

于是乎,哈哈哈哈,参数就出现了

1.设置一个参数,给定一个默认值,True的时候是正序;False的时候是倒序。

def  mm(a,reverse=True):
    if reverse:#如果reverse为True,升序
        for i in range(len(a)):
            for j  in range(len(a)-1-i):
                if a[j]>a[j+1]:
                    a[j],a[j+1]=a[j+1],a[j]
    else:
        for i in range(len(a)):
            for j  in range(len(a)-1-i):
                if a[j]<a[j+1]:
                    a[j],a[j+1]=a[j+1],a[j]

a=[1,2,4,3,1,6,4,8,4]
print('排序前',a)
mm(a,reverse=False)
print('排序后',a)

在这里插入图片描述其实就是把正序和倒序的代码写在一起,加一个if,else判断,根据reverse的值进行正序或者倒序

2.对不同的数据类型进行排序,给定一个key参数,默认值为None,最后在调用的时候传入的是一个函数。

def list_sort(lt, key=None, reverse=True):
   n = len(lt)#列表的长度,列表的数据类型不限,决定了循环的次数
   for i in range(n-1):#最外层循环次数
      for j in range(n-i-1):#内层循环次数
         if key:#如果数据类型为空
            if reverse:#设置为升序
               if key(lt[j]) > key(lt[j + 1]):
                  lt[j], lt[j + 1] = lt[j + 1], lt[j]
            else:#设置为降序
               if key(lt[j]) < key(lt[j + 1]):
                  lt[j], lt[j + 1] = lt[j + 1], lt[j]
         else:#如果数据类型不为空的话
            if reverse:#设置升序
               if lt[j] >lt[j+1]:
                  lt[j], lt[j+1] = lt[j+1], lt[j]
            else:#设置降序
               if lt[j] <lt[j + 1]:
                  lt[j], lt[j + 1] = lt[j + 1], lt[j]
   return lt #返回列表

lt = [
   {'name': 'xiaoming', 'age': 18},
   {'name': 'xiaoming', 'age': 15},
   {'name': 'xiaoming', 'age': 16},
   {'name': 'xiaoming', 'age': 17}
]
print(list_sort(lt, key=lambda d: d['age'], reverse=False))#调用函数,key传入一个lambda匿名函数,在这里的主要目的是为了获取lt列表中的数字项,即年龄。

打印结果:
在这里插入图片描述注意看,结果是根据年龄的大小来进行排序的。

其实这个代码的逻辑性有点小强,只要你掌握了核心思想,其实还是蛮简单的。(/≧▽≦)/(/≧▽≦)/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值