冒泡排序

冒泡排序是最常见的一种排序算法,也是很简单的一种排序算法。

相邻的元素进行两两比较,如果是升序则小的在左,大的在右;降序的话,反之。在经过数次比较循环,最终达到一个有序序列。

冒泡排序最优时间复杂度为O(n),最坏时间复杂度为O(n**2)

冒泡排序的原理可以种一张图来解释。

 

首先是相邻的元素进行两两比较,比较次数是无序队列的元素个数-1,如果左右相等数据不进行交换位置(冒泡排序是稳定排序),冒泡次数同样为无序队列元素个数-1。

def dubblesort(alist):
    n=len(alist)
    if n<=1:
        return  alist
    # 冒泡排序循环范围
    for i in range(n-1,0,-1):
        count=0
        # 内层数据比较循环范围
        for j in range(i):
            if alist[j]>alist[j+1]:
                alist[j],alist[j+1]=alist[j+1],alist[j]
                count+=1
        # 如果本次循环比较结束以后,计数器 count 还是0,说明本次比较循环并没有元素交换,也就证明列表已经有序,直接终止循环
        if count==0:
            break
    return alist

if __name__ == '__main__':
    alist=[2,41,31,54,90,21,1]
    print(dubblesort(alist))

 

 
posted @ 2019-01-06 17:33  名字到底要多长  阅读(192)  评论(0编辑  收藏  举报