入坑后的算法初学:用Python实现冒泡排序

入坑后的算法初学:用Python实现冒泡排序

参考书籍:《我的第一本算法书》

实现语言:Python

一:算法步骤描述(自己理解的,不一定准确,欢迎指正):

(1)得到一个任意排序任意长度大小的数字序列,假设将它分为已被排序过的"有序区间"和未被排序过的"待排序区间"

(2)从它的最右边一个数字开始依次和它的前一个数字进行比较,将这2个数字中较小的数字放置到这两个数字中靠左那个数字的位置,直到被比较的两个数碰到"有序数列区间"前停止。

(3)步骤(2)算比较完一轮,每比较完一轮,每一轮比较下来都会产生一个最小数,它们会被放置到现有"有序数列区间"的最后一位。直到所有的数都被放置到"有序数列区间"中时排序停止

上面看不懂没关系,下面将会插入图片进行讲解(其实直接看图也是可以的,记录上面一方面是为了加深自己的理解)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二:代码块(尽量遵循自己理解的描述以及上述图片流程)
'''
    需求:输入一个数字列表,按从小到达输出
    算法选择:冒泡排序
    算法解析:
        冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字
    的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的
    顶端,所以这个算法才被称为“冒泡排序”。
'''

def maopao(num_list):
    for i in range(0,len(num_list)):
        '''
            i表示有序区间的索引 [0,i)
            j表示待比较区间的索引[i,数组总长度) => [i,数组长度-1]
            i:[-∞,0)  j:[0:7]   #i这里不可能为-∞,所以第一轮比较的时候,有序区间是没有数字放置的
            i:[0:1)   j:[1:7]   
            i:[0:2)   j:[2:7]   
            ........  .........
            i:[0:7)   j:[7:7]   
            (1)随着每比较一轮,i都会增大1,代表一轮比较中的最小数字已被放置到有序区间中的最后一位
            (2)第二层for循环中,j是从数组最后一个数开始的,和它的前一个数字开始比较,
            (3)将它们中较小的数字放置在两个数字中靠左边那个数字的位置,直到比较到有序区间的前一位停止(有序区间不参与比较)
            (4)比较完一轮后j又从右边从头开始新的一轮,直到碰到有序区间停止然后进行下一轮........
            (5)所有的轮数待所有数字都待在有序区间内为止
        '''
        for j in range(-1,-len(num_list)+i,-1):
            if(num_list[j] < num_list[j-1]):
                num_list[j],num_list[j-1] = num_list[j-1],num_list[j] #交替两个数字的位置

    return num_list

print(maopao([2,5,6,8,4,7,1,3]))

第一篇博客文章就结束辽(第一次写,欢迎指正),之后将持续更新自己的学习总结,笔者是从事后端web开发,所以文章不限于数据结构和算法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值