用python实现冒泡排序_利用Python进行冒泡排序

# -*- coding:utf-8 -*-

## 冒泡排序解析

"""

冒泡排序的必备知识:

互换位置 用temp临时变量

a1 = 456

a2 = 123

temp = a1

a1 = a2

a2 = temp

print(a1)

print(a2)

Python中可以不使用中间变量temp。直接可以进行互换位置。

a1 = 456

a2 = 123

if a1 > a2: # 如果a1 比 a2 大,那么 交换位置

a1, a2 = a2, a1 # 运用到多变量赋值,用元组分隔。括号可以去除

print(a1, a2)

# 冒泡排序原理

1 1 1 33

10 10 33 1

》 》 》

2 33 10 10

33 2 2 2

上面是4个数。通过依次的从下面两个数开始比较,再与上面比较,得出最大的值,将最大的值放在最上面的位置,这就是冒泡。

33和2 先排序。利用的就是上面的那个基础知识。那么2在下面,33在上面。然后33和10再进行比较。最大的放上面,最小的放下面。。。。。

最后找到了33是最大值。该值为最大。放到了最上面。通过一系列的比较。33是最大的放在上面了。

然后再次操作步骤和上面一样,再进行最下面两个比较,依次比较。将最大的第二个数放到最上面。

33 33

1 10

10 1

2 2

这次将最大的第二位数10找到了。

继续比较。。。

33 33

10 10

1 2

2 1

这就是最终的结果,这就是应用的冒泡排序原理进行排序。

-------------

li = [33, 2, 10, 1]

使用冒泡排序,将列表从小到大排序;

下面用代码实现:

"""

li = [33, 2, 10, 1] # 这是一个列表。长度为len(li)

print(li)

for i in range(len(li) - 1):

# i = 0 1 2 3

# current_value: li[i] 33 2 10 1

# next_value: li[i + 1] 2 10 1 无值了,导致数组越界。因此range(len(li) - 1)

# print(i, li[i], li[i+1])

if li[i] > li[i + 1]:

temp = li[i]

li[i] = li[i + 1]

li[i + 1] = temp

print(li) # 这次将最大的值33 取出了 放到了最后。

# 33最大的取出来了,li = [2, 10, 1, 33] ;现在还有再进行排序。将前三个值进行分别冒泡排序。那么就是 for i in range(len(li) - 2)

for i in range(len(li) - 2):

if li[i] > li[i + 1]:

temp = li[i]

li[i] = li[i + 1]

li[i + 1] = temp

print(li) # 这次将第二大的的值33 取出了倒数第二位。

# 10第二大的取出来了, li = [2, 1, 10, 33], ;现在还有再进行排序。将前两个值进行分别冒泡排序。那么就是 for i in range(len(li) - 3)

for i in range(len(li) - 2):

if li[i] > li[i + 1]:

temp = li[i]

li[i] = li[i + 1]

li[i + 1] = temp

print(li)

# 这里就结束了,因为只有最后两个数 1 和 2 进行比较了。

# 总结上面的代码过程。唯一的区别在于for i in range(len(li) - 【1、2、3】) 这里的不同。那么就可以再在外面做个循环。

# li 的长度为len(li);上面len(li)个数排序进行了 -1 -2 -3 三次的过程。那么外层循环可以用 for j in range(1, len(li)) 即可。

冒泡排序最终表达式

li = [22, 31, 82, 35, 333, 2, 62, 78, 24, 6, 23, 4, 8, 88, 5, 42, 21, 233, 1232, 165, 121, 2480, 82, 12, ]

for j in range(1, len(li)):

for i in range(len(li) - j):

if li[i] > li[i + 1]:

temp = li[i]

li[i] = li[i + 1]

li[i + 1] = temp

print(li)

或者

for j in range(1, len(li)):

for i in range(len(li) - j):

if li[i] > li[i + 1]:

li[i], li[i + 1] = li[i + 1], li[i] # Python可以不使用中间变量temp,直接可以互换位置。括号可以去除

print(li)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值