[算法][排序][Python]冒泡排序的实现与思考

冒泡排序(Bubble Sort):

作为常见的排序算法之一,主要思想是,通过两层遍历比较相邻两数的大小,交换两数的位置,在每次遍历之后,选出当前无序List中最大的那个放置在当前无序List最后,并将该最大值划分给有序List中,无序List的长度则减1,直到无序List的长度为0,排序完成(从低->高排序为例)

Python 基本实现:

# -*- coding: UTF-8 -*-

def Bubble(x):
    #遍历所有元素
    for i in range(len(x)-1, 0, -1):
            #对剩余的i个无序元素进行遍历,将最大值放到队列最后
            for j in range(i):
                if x[j]>x[j+1]:
                   #python的这个两数交换的写法非常赞
                    x[j],x[j+1]=x[j+1],x[j]
    print x
    
list = [31,45,4,44,33,5,2,68]
Bubble(list)

思考:

冒泡算法属于交换排序中的一种。

时间复杂度

(n-1) + (n-2) + (n-3) + ..... + 3 + 2 + 1
Sum = n(n-1)/2
i.e O(n * n)

空间复杂度

辅助空间:O(1)

优化算法:

# -*- coding: UTF-8 -*-

def Bubble(x):
    #通过设置flag对冒泡算法进行优化,当发现某次遍历中没有进行元素交换,则说明剩下的元素已经有序,则结束遍历
    flag = True
    #遍历所有元素
    for i in range(len(x)-1, 0, -1):
        if flag:
            #初始设置flag=false 表示没有交换
            flag = False
            #对剩余的i个无序元素进行遍历,将最大值放到队列最后
            for j in range(i):
                if x[j]>x[j+1]:
             #python的这个两数交换的写法非常赞
                    x[j],x[j+1]=x[j+1],x[j]
                    flag = True
        else:
            break
    print x
    
list = [31,45,4,44,33,5,2,68]
Bubble(list)

时间复杂度

平均情况:O(n * n)
最好情况:O(n)
最差情况:O(n * n)

递归实现

def bubble_recursive_sort(x):
    for i in range(len(x)-1, 0, -1):
        if x[i]

你可能感兴趣的:([算法][排序][Python]冒泡排序的实现与思考)