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)