排序算法1-冒泡排序法

  • 标准写法(从后往前排)
def BubbleSort(a):
    for i in range(len(a)-1):
        for j in range(len(a)-1-i):
            if a[j] > a[j+1]:
                a[j], a[j+1] = a[j+1], a[j]
    return a

测试

L =[3, 1, 5, 4, 2]
BubbleSort(L)

[1, 2, 3, 4, 5]

注意此时列表L的值也变为[1, 2, 3, 4, 5]

  • 从前往后排的写法
def BubbleSort2(a):
    for i in range(len(a)-1):
        for j in reversed(range(i+1,len(a))):
            if a[j] < a[j-1]:
                a[j], a[j-1] = a[j-1], a[j]
    return a

测试

L =[3, 5, 2, 4, 1]
BubbleSort2(L)

[1, 2, 3, 4, 5]

  • 双向排序写法,同时输出排序过程
def BubbleSort3(a):
    for i in range(len(a)-1):
        for j in range(len(a)-1-i):
            if a[j] > a[j+1]:
                a[j], a[j+1] = a[j+1], a[j]
                print(a)
        for j in reversed(range(i+1,len(a))):
            if a[j] < a[j-1]:
                a[j], a[j-1] = a[j-1], a[j]
                print(a)
    return a

其排序过程如下

L =[3, 5, 2, 4, 1]
BubbleSort3(L)

[3, 2, 5, 4, 1]
[3, 2, 4, 5, 1]
[3, 2, 4, 1, 5]
[3, 2, 1, 4, 5]
[3, 1, 2, 4, 5]
[1, 3, 2, 4, 5]
[1, 2, 3, 4, 5]

先将5交换到最后,然后将1交换到最前,再将4交换到倒数第二格,以此类推
双向排序过程图示test

猜你喜欢

转载自www.cnblogs.com/babysteps/p/python_algorithm_bubblesort.html