排序算法:冒泡排序

冒泡排序的思想:

  遍历列表,从头开始,将相邻的2个数字进行比较,将较大的数字放在右边,这样一趟下来,

  最后一个数字就是这一趟中的最大值,重复上述步骤,

  需要注意的点:

  需要遍历的趟数

  每趟需要交换的次数 (建议画个图) 

代码:


def bubblo_sort_simple(li):
    '''原地排序
    '''

    for i in range(len(li) - 1):  # 遍历的趟数, 第几趟.
        for j in range(len(li)- i - 1): # 每趟需要比较的次数
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j] 

        print(li)
 
li = [9,8,7,6,5,4,3,2,1]
print(li)
bubblo_sort_simple(li)
li = [9,8,7,6,5,4,3,2,1]
#li = [1,2,3,4,5,6,7,8,9]
print(li)
bubblo_sort_simple(li)
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[8, 7, 6, 5, 4, 3, 2, 1, 9]
[7, 6, 5, 4, 3, 2, 1, 8, 9]
[6, 5, 4, 3, 2, 1, 7, 8, 9]
[5, 4, 3, 2, 1, 6, 7, 8, 9]
[4, 3, 2, 1, 5, 6, 7, 8, 9]
[3, 2, 1, 4, 5, 6, 7, 8, 9]
[2, 1, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

## 列表已经排好顺序了
li = [1,2,3,4,5,6,7,8,9]
print(li)
bubblo_sort_simple(li)

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

冒泡排序代码优化:

def bubblo_sort(li):
    '''对冒泡算法进行优化
    冒泡算法中,涉及到数据位置交换,
    如果在一趟中,没有进行任何的数据交换,认为这个是有序数据.

    '''
    for i in range(len(li) - 1):  # 遍历的趟数, 第几趟.
        exchange = False
        for j in range(len(li)- i - 1): # 每趟需要比较的次数
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j] 
                exchange = True
        print(li)
        if not exchange:
            return li
    
li = [9,8,7,6,5,4,3,2,1]
#li = [1,2,3,4,5,6,7,8,9]
print(li)
bubblo_sort(li)
PS E:gitAlgorithm冒泡排序> python .demo.py 
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
PS E:gitAlgorithm冒泡排序> python .demo.py 
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[8, 7, 6, 5, 4, 3, 2, 1, 9]
[7, 6, 5, 4, 3, 2, 1, 8, 9]
[6, 5, 4, 3, 2, 1, 7, 8, 9]
[5, 4, 3, 2, 1, 6, 7, 8, 9]
[4, 3, 2, 1, 5, 6, 7, 8, 9]
[3, 2, 1, 4, 5, 6, 7, 8, 9]
[2, 1, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

从优化的代码中可以看出,如果序列已经是有序的,只需要运行一趟. (上面的代码默认升序,如果要降序,修改下比较代码)

  

原文地址:https://www.cnblogs.com/lmt921108/p/14043643.html