python实现冒泡排序

常见的排序算法

  1. 冒泡排序(Bubble Sort)
  2. 选择排序(Selection Sort)
  3. 插入排序(Insertion Sort)
  4. 快速排序(Quick Sort)
  5. 希尔排序 (Shell Sort)
  6. 归并排序 (Merge Sort)

冒泡算法的思想
冒泡排序算法的运作如下:

  1. 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

下面来用python实现冒泡排序

#_*_coding:utf-8_*_


def bubble_sort(a):
    #a is a list
    if not a:
        return
    length = len(a)
    for i in range(0, length - 1):
        for j in range(0, length - i -1):
            if a[j] > a[j+1]:
                a[j], a[j+1] = a[j+1],a[j]

if __name__ == '__main__':
    list1 = [34,12,1,8,9,19,12]
    print(list1)
    bubble_sort(list1)
    print(list1)

分析一下上面的程序可以得出:
1.时间复杂度O(n^2)

  1. 如果原来的序列本来就是有序的话,如果按照上述算法,时间复杂度依旧是O(n^2), 对此可以进行算法优化,可以加入内循环计数器用来记录交换的次数,如果内循环计数器始终为零,则表示该数列是有序的,就不用进行外循环了,算法复杂度可以O(n)

优化算法实现为:

#_*_coding:utf-8_*_


def bubble_sort(a):
    #a is a list
    if not a:
        return
    length = len(a)
    for i in range(0, length - 1):
        **count = 0**
        for j in range(0, length - i -1):
            if a[j] > a[j+1]:
                a[j], a[j+1] = a[j+1],a[j]
                **count += 1**
        **if count == 0:
            return**

if __name__ == '__main__':
    #list1 = [34,12,1,8,9,19,12]
    list1 = [1,2,3,4,5]
    print(list1)
    bubble_sort(list1)
    print(list1)

冒泡算法时间复杂度总结

  1. 最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)
  2. 最坏时间复杂度:O(n2)
  3. 稳定性:稳定

你可能感兴趣的:(python实现冒泡排序)