冒泡法排序-python 3.x

1.给1个列表进行从小到大排序,需要用到嵌套循环,为了方便理解我直接拿一个从大到小的列表进行举例分析。

a=[8,7,6,5,4,3,2,1]
for i in range(len(a)-1):  #需要进行len(a)-1轮的循环,如一个列表只有2个数字,只需进行1轮即可
    for j in range(len(a)-1-i):  #每一轮都是把进行比较的数字最大值放到后面,如已进行1轮比较,
    最后一个值就没必要再进行比较,此做法也提高了运行性能
        if a[j]>a[j+1]:
            a[j],a[j+1]=a[j+1],a[j]
    print(a)
print('排序后的值是',a)
#运行时的步骤,8个数字分别比较7+6+5+4+3+2+1即n*(n-1)/2
[7, 6, 5, 4, 3, 2, 1, 8]  
[6, 5, 4, 3, 2, 1, 7, 8]
[5, 4, 3, 2, 1, 6, 7, 8]
[4, 3, 2, 1, 5, 6, 7, 8]
[3, 2, 1, 4, 5, 6, 7, 8]
[2, 1, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
排序后的值是 [1, 2, 3, 4, 5, 6, 7, 8]

2.输入一个数组,实现一个函数,让所有奇数都在偶数前面,原地排序。此题依然可以使用冒泡法解决,我们还是用一个极限的列表举例子a=[4,6,8,3],该排序方法比较慢,我暂时还没想到更优解。

def func(a):
    if not isinstance(a,list):
        return '参数不对'
    for i in range(len(a)-1):
        for j in range(len(a)-1-i):
            if a[j]%2==0 and a[j+1]%2!=0:
                a[j],a[j+1]=a[j+1],a[j]
        print(a)
    return a
>>> a=[4,6,8,3]
>>> func(a)
[4, 6, 3, 8]  #第一轮排序,把最后面的偶数放到最后一位
[4, 3, 6, 8]  #第二轮排序,把上轮排序结果除最后一位最后面的偶数放到倒数第二位
[3, 4, 6, 8]  #第三轮排序,把上轮排序结果除最后一位最后面的偶数放到倒数第二位
[3, 4, 6, 8]  #最后return a
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值