冒泡排序--时间(空间)复杂度分析(python)

本文介绍了冒泡排序的基本原理和算法过程,通过动图直观演示排序过程,并提供了详细的Python代码实现。此外,还分析了冒泡排序的时间复杂度,指出其在最好和最坏情况下的时间复杂度分别为O(n)和O(n^2),同时强调冒泡排序是稳定的排序算法。

1、原理

       冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 

2、算法简介

  • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  • 针对所有的元素重复以上的步骤,除了最后一个;
  • 重复步骤1~3,直到排序完成。

3、动图演示

4、python代码实现

# 冒泡排序
# 时间复杂度:(n-1) + (n-2) + ... + 1 = n*(n-1)/2

import random

def Bubble_Sort(s):
    sum_ = 0
    count = len(s)
    for i in range(count - 1):
        for j in range(count-1-i):
            if s[j] > s[j+1]:
                s[j], s[j+1] = s[j+1], s[j]
            print(f"第 {i} 步: {s}")
            sum_ += 1
    print(f"花费次数:{sum_}")
    return s

if __name__ == '__main__':
    n = int(input(":::::"))
    s = [random.randint(0, n) for i in range(n)]
    # s = [1, 2, 3, 4, 5]
    Bubble_Sort(s)

运行结果:

:::::5
第 0 步: [0, 4, 0, 1, 2]
第 0 步: [0, 0, 4, 1, 2]
第 0 步: [0, 0, 1, 4, 2]
第 0 步: [0, 0, 1, 2, 4]
第 1 步: [0, 0, 1, 2, 4]
第 1 步: [0, 0, 1, 2, 4]
第 1 步: [0, 0, 1, 2, 4]
第 2 步: [0, 0, 1, 2, 4]
第 2 步: [0, 0, 1, 2, 4]
第 3 步: [0, 0, 1, 2, 4]
花费次数:10

5、复杂度分析

时间复杂度:

  • 最坏的情况,时间复杂度为:(n-1)+(n-2)+(n-3)+ ... +n=n*(n-1)/2=O(n^{2})
  • 最好的情况,时间复杂度位:O(n)

空间复杂度:O(1)

6、算法稳定性:稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值