# 冒泡排序
# 排序的历程:两个相邻的数对照,好比从小到大比:若是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)