欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

大话算法-排序-冒泡排序

程序员文章站 2022-07-11 19:42:49
1、冒泡排序是反复扫描序列,在扫描过程中顺次比较两个元素大小,如果逆序交换位置(如果某一趟冒泡排序中,没有发现一个逆序,则可以直接结束整个排序), 2、最好情况:序列都是正序的,时间复杂度O(n),比较n-1次 交换0次, 3、最坏的情况:序列完全逆序。时间复杂度是O(n2),空间复杂度O(1) ......

1、冒泡排序是反复扫描序列,在扫描过程中顺次比较两个元素大小,如果逆序交换位置(如果某一趟冒泡排序中,没有发现一个逆序,则可以直接结束整个排序),

2、最好情况:序列都是正序的,时间复杂度o(n),比较n-1次 交换0次,

3、最坏的情况:序列完全逆序。时间复杂度是o(n2),空间复杂度o(1)

 

# 一般方法
def bubble(nlist):
    nlen = len(nlist)
    if nlen == 0:
        return
    if nlen == 1:
        return nlist
    #i表示趟数,最多进行n-1趟    
    for i in range(nlen-1,0,-1):
        for j in range(i):
            if nlist[j] > nlist[j+1]:
                nlist[j],nlist[j+1] = nlist[j+1],nlist[j]
    return nlist

# 优化
def bubble(nlist):
    nlen = len(nlist)
    if nlen == 0:
        return
    if nlen == 1:
        return nlist
    flag = 1
    while flag and nlen:
        #如果哪一趟没有交换(全部顺序),则表示全部排好序(剩下的都排好序不用交换)
        flag = 0
        for j in range(nlen-1):
            # 判断是否有逆序的,如果有调换
            if nlist[j] > nlist[j+1]:
                nlist[j],nlist[j+1] = nlist[j+1],nlist[j]
                flag = 1
        # print(flag,nlen,nlist)
        nlen -= 1
        
    return nlist