Python(2)选择排序、冒泡排序

l = [9, 6, 7, 2, 4]

#选择排序   从左往右,第一轮交换找到最小值,第二轮交换找到第二小值,依次类推
#每轮  都是将最小的值换到最前面     保证每轮左边的值为当前轮最小值
'''
. ....
. | . ...
.. | . ..
... | . .
 9 6 7 2 4  i = 0(9), j = 1(6)      第0位的数字,逐个与后面的数字进行比较,并将最小的值保存在第0位
 6 9 7 2 4  i = 0(6), j = 2(7)
 6 9 7 2 4  i = 0(6), j = 3(2)
 2 9 7 6 4  i = 0(2), j = 4(4)
 2 9 7 6 4

 2 9 7 6 4  i = 1(9), j = 2(7)       最左侧已为最小值,从第二位开始
 2 7 9 6 4  i = 1(7), j = 3(6)
 2 6 9 7 4  i = 1(6), j = 4(4)
 2 4 9 7 6

 2 4 9 7 6  i = 2(9), j = 3(7)
 2 4 7 9 6  i = 2(7), j = 4(6)
 2 4 6 9 7

 2 4 6 9 7  i = 3(9), j = 4(7)
 2 4 6 7 9
 ''' 

for i in range(len(l)):
    for j in range(i + 1, len(l)):
        if l[i] > l[j]:
            l[i], l[j] = l[j], l[i]
print(l)


#冒泡排序       判断总共需要比较的轮数,每一轮比较 len(l) - 1 - i  -1  (-1:元素数量 - 1 = 比较的次数)  (-i:每一轮确定出当前轮的最大值)
#保证每轮右边是最大的值
'''
9, 6, 7, 2, 4
i = 0, j = 0    j = 0(9) j = 1(6)   -->6 9 7 2 4    第一轮比较,将最大值取出,并交换到最右侧   
i = 0, j = 1    j = 1(9) j = 2(7)   -->6 7 9 2 4
i = 0, j = 2    j = 2(9) j = 3(2)   -->6 7 2 9 4
i = 0, j = 3    j = 3(9) j = 4(7)   -->6 7 2 4 9

i = 1, j = 0    j = 0(6) j = 1(7)   -->6 7 2 4 9
i = 1, j = 1    j = 1(7) j = 2(2)   -->6 2 7 4 9
i = 1, j = 2    j = 2(7) j = 3(4)   -->6 2 4 7 9

i = 2, j = 0    j = 0(6) j = 1(2)   -->2 6 4 7 9
i = 2, j = 1    j = 1(6) j = 2(4)   -->2 4 6 7 9

.....       5个元素,比较四次
.... | .
... | ..
.. | ...    

'''
for i in range(0, len(l) - 1):  #len(1) - 1 比较的轮数
    for j in range(0, len(l) - 1 - i):      #len(l) - 1 - i  当前轮内,比较的次数  -1-i  -1比较次数,-i轮数已经取出最大的数,不用比较
        if l[j] > l[j + 1]:
            l[j], l[j + 1] = l[j + 1], l[j]
print(l)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值