冒泡排序

def swap(lyst,i,j):
    lyst[i],lyst[j]=lyst[j],lyst[i]
def bubbleSort(lyst):
    n = len(lyst)
    while n>1:
        i = 1
        while i<n:
            if lyst[i]<lyst[i-1]:
                swap(lyst,i,i-1)
            i += 1
        n -= 1
    return lyst
L=[4,3,5,1,2]
print(bubbleSort(L))

 
 
def swap(lyst,i,j):
    lyst[i],lyst[j]=lyst[j],lyst[i]
def bubbleSort(lyst):
    n = len(lyst)
    while n>1:
        i = 1
        while i<n:
            if lyst[i]<lyst[i-1]:
                swap(lyst,i,i-1)
            i += 1
        n -= 1
    return lyst
L=[4,3,5,1,2]
print(bubbleSort(L))
代码参考了数据结构(Python语言描述)相关书籍。

算法思想:从第一项开始,比较相邻的两个数据,直到移至列表的末尾。在移动的过程中如果两项数据的顺序不对时,交换两个数据的位置,在这个过程中会将最大项数据移至末尾。

               例:[4,3,5,1,2]-{[3,4,5,1,2]-[3,4,5,1,2]-[3,4,1,5,2]-[3,4,1,2,5]}-{[3,4,1,2,5]-[3,1,4,2,5]-[3,1,2,4,5]}-{[1,3,2,4,5]-[1,2,3,4,5]}-{[1,2,3,4,5]} (其中{...}表示外层循环)

                           若采用改进后的算法(第二个编程示例):[4,3,5,1,2]-{[3,4,5,1,2]-[3,4,5,1,2]-[3,4,1,5,2]-[3,4,1,2,5]}-{[3,4,1,2,5]-[3,1,4,2,5]-[3,1,2,4,5]}-{[1,3,2,4,5]-[1,2,3,4,5]} (其中{...}表示外层循环),最后一次循环将不存在,直接跳出了循环。

复杂度分析:第一个示例,最好、最坏及平均情况复杂度均为O(n*n),只是当数据排好序的情况下不需要进行数据的交换。

                   第二个示例,最坏和平均情况下复杂度均为O(n*n),最好的情况下为O(n)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值