冒泡排序基础&Python实现

冒泡排序是一种稳定的排序算法,通过重复遍历数组,比较相邻元素并交换来排序。在最佳情况下,当数组已排序时,时间复杂度可达到O(N)。然而,平均和最坏情况下的时间复杂度均为O(N²)。由于只涉及原数组内的交换,空间复杂度为O(1)。文章提供了一个冒泡排序的Python代码示例。
摘要由CSDN通过智能技术生成

冒泡排序

概念

每一个元素都可以像小气泡一样,根据自身的大小一点一点的向数组的一侧移动,就像小气泡一样慢慢的冒了上来

原理

重复问的走过数组,一次比较两个数字,将较大的数字向后进行交换,每一趟只能将一个数字进行归位,即第一趟可以将末位上的数归位,第二趟可以当讲倒数第二位上的数归位,依次类推下去,如果有N个数进行排序,那么只需要将N-1个数归位,也就是需要n-1趟操作。

优缺点

优点:稳定排序

缺点:慢,每次只能移动相邻的两个数据

代码
def dubble_sort(arr):
  for i in range(len(arr)-1):
    # 如果有序,时间复杂度可以降低到O()N
    tag = False
    for j in range(0,len(arr)-i-1):
      if arr[j] > arr[j+1]:
        arr[j],arr[j+1] = arr[j+1],arr[j]
        #  发生了交换,就意味数组不是有序的
        tag = True
       # 走过一轮之后,没有发生交换,就意味着是有序的
      if tag == Fasle:
        return
复杂度

当数组是有序的时候,时间复杂度可以来到O(N)级别的

因为都是在数组内进行交换,并未使用额外空间,所以空间复杂度为O(1)

因为是两两比较的,相同的数不会交换位置,例如7,2,7,2,9,第一轮交换变成2,7,7,2,9,然后7和7相等,下标直接移动到第二个7上,让第二个7去跟2比较,整个过程中是不会发生位置交换的。

时间复杂度
最优O(N)
最差O(N²)
平均O(N²)
空间复杂度O(1)
稳定性稳定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值