# 冒泡排序
# 排序的过程:两个相邻的数比较,比如从小到大比:如果a>b就交换两个数,一直交换到最后一个,确定了最大的值排在最后,再接着比第二轮...
# 从左边往右边交换:第一轮比较后,最右边的就是最大值,接着比较第二轮就要排除最右边的已排好的数字,每轮比较都是如此
# 注意嵌套训循环对索引的控制

a = [2,3,0,100,6,3,-2]
n=len(a)

print("从左往右交换:")
for i in range(n-1,0,-1):
    for j in range(i):
        if a[j] > a[j+1]: #如果时<,就从大到小排列
            a[j],a[j+1] = a[j+1],a[j]

print(a)

# 从右往左交换:比如从小到大排序,从右边开始交换,将最小的数排在左边,下一轮比较就要排除左边已经排好序的
# 注意嵌套训循环对索引的控制
print("从右往左交换")
for i in range(n):
    for j in range(n-1-i,0,-1):
        if a[j] < a[j-1]: #如果时<,就从大到小排列
            a[j],a[j-1] = a[j-1],a[j]
print(a)

# 选择排序:
# 排序过程:每轮以左边第一个数为基准,假设是最大值,然后依次和右边的数比较,如果右边的数比他大,那么将这个数设置为最大值,并存储它的索引
# 直到第一轮比较完,确定了最大值,将最大值和最右边位置的交换;比较第二轮,排除最右边的最大值,第三轮...
#从左往右排:从小到大排,每次将最大的排在最右边

print("选择排序,从左往右")
for i in range(n-1,0,-1):
    positionMax = 0
    for j in range(1,i+1):
        if a[j] > a[positionMax]:
            positionMax = j
    a[i],a[positionMax] = a[positionMax],a[i]

print(a)

# 排序过程:从右往左排,比如从小往大排:以右边为基准,从右开始比较,每轮比较,将最小的排到最左边,排完所有轮,排序完成
print("选择排序,从右往左")
for i in range(n):
    positionMax = n-1
    for j in range(n-i-1,0,-1):
        if a[j] > a[positionMax]:
            positionMax = j
    a[j], a[positionMax] = a[positionMax],a[j]

print(a)