Python——冒泡排序

1.基本原理 

      冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

      排序思想:

       从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。

    时间复杂度:

         冒泡排序的时间复杂度在最坏和平均情况下都是 O(n^2),其中 n 是列表的长度。
              解释如下:

  1. 最坏情况下,即输入数组完全逆序,需要进行 n(n-1)/2 次比较和交换,所以最坏情况下的时间复杂度是 O(n^2)。
  2. 平均情况下,需要进行近似 n(n-1)/4 次比较和交换,所以平均情况下的时间复杂度也是 O(n^2)。
    在最好情况下,即输入数组已经完全有序,冒泡排序只需要进行 n-1 次比较,不需要进行交换,所以最好情况下的时间复杂度是 O(n)。

     图形解释:

   2. 代码如下:

#coding=utf-8

#冒泡排序

data=[2,5,8,11,6,8,6,8,9,11,555,68,56]#定义无序list
new_data=data.copy()#data列表的副本,以下我们对副本进行操作,目的是不改变原始data中的顺序,最后形成对比
n=len(new_data)#n为无序list(data)的长度,len(data)获取无序列表中元素的长度

#冒泡排序算法
for i in range(n-1):  #有n个数所以需要执行n-1次
    for j in range(n-1):  #从第一个数到倒数第二个数,因为j+1所以阔以到最后一个数
        if new_data[j]>new_data[j+1]:  #判断前一个数是否大于后一个数
            temp=new_data[j+1]   #小数储存
            new_data[j+1]=new_data[j] #大数在后
            new_data[j]=temp #将小数置前
print('初始无序list(data):',data)
print('冒泡排序后有序list(new_data):',new_data)

  输出结果:

注:

    本文章排序思想,图形解释内容来自于 @小明的c++笔记本 大大的文章,链接如下:http://t.csdnimg.cn/ZRtx5icon-default.png?t=N7T8http://t.csdnimg.cn/ZRtx5

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值