数据结构之排序一:冒泡排序

def bubbleSort(myList):
    # 首先获取list的总长度,为之后的循环比较作准备
    length = len(myList)
    # 一共进行几轮列表比较,一共是(length-1)轮
    for i in range(0, length):
        print("i",i)
        # 每一轮的比较,注意range的变化,这里需要进行length-1-长的比较,注意-i的意义(可以减少比较已经排好序的元素)
        for j in range(0, length - 1 - i):
            # 交换
            if myList[j] > myList[j + 1]:
                tmp = myList[j]
                myList[j] = myList[j + 1]
                myList[j + 1] = tmp# 打印每一轮交换后的列表
        print(myList)
        print("=============================")
    return myList

改进:

def bubbleSort(myList):
    # 首先获取list的总长度,为之后的循环比较作准备
    length = len(myList)

    # 一共进行几轮列表比较,一共是(length-1)轮
    for i in range(0, length):
        print("i",i)
        flag = False  # 改进版本,如果本来就是有序的就只需要比较一趟时间复杂度为O(n)

        # 每一轮的比较,注意range的变化,这里需要进行length-1-长的比较,注意-i的意义(可以减少比较已经排好序的元素)
        for j in range(0, length - 1 - i):

            # 交换
            if myList[j] > myList[j + 1]:
                tmp = myList[j]
                myList[j] = myList[j + 1]
                myList[j + 1] = tmp
                flag = True

        # 打印每一轮交换后的列表
        print(myList)
        print("=============================")
        if flag == False:
            break
    return myList

时间复杂度:

  平均:O(n^2)

  最好:O(n)  (递增/递减)

  最坏:O(n^2) (递减/递增)

空间复杂度:O(1)

稳定性:稳定

原文地址:https://www.cnblogs.com/mengxiangtiankongfenwailan/p/11338855.html