python 冒泡排序

一、冒泡排序

1、冒泡排序实质是一种交换排序。即下标相邻索引数据两个之间有小到大,两两进行排序,直到所有数据不再两两交换为止。

2、算法思想

第一次循环:下标索引两数据,有最小索引数据开始,与后一数据进行比较。如果后面数据比前面大,则不交换,最小索引下标进一,继续进行两两比较,直达序列最后为止。

第二次循环:又由最小下标开始,两两进行比较,直到最后。

循环len(序列)个数为止。

动态效果图:

每趟排序过程中通过两两比较相邻元素,将小的数字放到前面,大的数字放在后面。

def maopaoSort(input_list):
    '''
    冒泡排序
    :param input_list: 输入的list
    :return:  排序后结果
    '''
    #判空,如果输入的list为空,返回空
    if len(input_list) == 0:
        return []
    #循环比较所有
    for i in range(len(input_list)-1):
        print("第{}趟排序:".format(i+1))
        #对前一个的数据与后一个的数据进行比较
        for j in range(len(input_list) - 1):
            #后一个的数据比前一个小,交换数据
            if input_list[j + 1] < input_list[j]:
                input_list[j], input_list[j+1] = input_list[j+1], input_list[j]
        print(input_list)
    return input_list
my_list = [5,4,7,1,7,3,2,9]
maopaoSort(my_list)

                                                                    

3、时间复杂度

如果所有数据都是由小到大排序好的,只需要循环一次即可,最优的时间复杂度为O(n)

如果所有数据都是由大到小排队的,那么每一个数据都需要循环比较,最差的时间复杂度为O(n^2)

4、算法稳定性

冒泡排序是一种稳定的排序方式,相同值的的序列前后位置排序完不改变。所有冒泡排序是一张稳定排序算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值