几个月过去了,小白逐渐对公司的后端服务熟悉了,不过这天小白又接到一封神秘邮件,是景女神发来的:公司急需一批对语言算法有些了解的优秀员工,鉴于你在公司的表现很不错,现在给到你一个培训机会,请速到开发部报道!

  小白这次没有疑惑,整理好文件后就去了开发部报道,一看到在开发部培训的是小刘,小白是喜上眉梢。

  小刘一见是小白来了,跟见了老熟人似得,心里也是乐开了花,不过小刘没有表示的很淡定,并直接切入到整体

  小刘:小白,过来!我先考考你,有这么一个列表li = [11,22,33,44],我要求你把22和33的位置对调一下?你做做看看

  小白心里想这还不简单,用li[2] = li[1],再li[1] = li[2],然后就有如下代码

  

  小白测试一下,发现不是自己想要的结果,不过小白马上想到在这个赋值过程中会改变值,于是小白马上转换了思路,写下了下面的代码

  

  小白对自己的这种方法得到的结果非常的满意,然后把自己的代码给到小刘看

  小刘先是点头,然后又是摇头,然后跟小白说:你这方法可行,不过你不觉的这方法有什么不足吗?

  小白想了想:有!移除一个元素后会打破列表原有的顺序,因为这个,我刚才还有点思绪紊乱

  小刘:对!那我告诉你一种更简单的方法,看好了。

  

  小白看完后,连连称妙!

  小刘:这个原理懂了吧?那我们直接进入到冒泡排序吧!

  小白:冒泡排序?

  小刘:对!刚才我讲的就是冒泡排序的原理!那小白你看这个最后输出什么?

li = [33,2,10,1]

for i in range(len(li)-1):
if li[i] > li[i+1]:
temp = li[i]
li[i] = li[i+1]
li[i+1] = temp print(li)

  小白很认真,在旁边画起了图...

  

  小白恨得意的把结果报给了小刘

  小刘也连忙夸奖小白聪明,小刘接着问道小白:小白!那它到底干了什么了?

  小白如有所思的回答到:看这结果,是最大值弄到最右边!

  小刘连忙点头:这其实已经对一个数字排好了序,那如果把整个列表按从左往右升序排列,工作做到这里了,小白!接下来你会怎么做了?

  小白边思考边写代码

   

for i in range(len(li)-2):
if li[i] > li[i+1]:
temp = li[i]
li[i] = li[i+1]
li[i+1] = temp print(li)

  此次的结果为[2, 1, 10, 33]

  小白心想,不就差一步的事

  

for i in range(len(li)-3):
if li[i] > li[i+1]:
temp = li[i]
li[i] = li[i+1]
li[i+1] = temp print(li)

  小白会心的一笑,大功告成,不过小白立即想到,代码好多是重复的,肯定有优化方案,小白脑中灵光闪现--递归

def maopao(data,j=1):
if len(data) - j == 0:
return data
else:
for i in range(len(data)-j):
if data[i] > data[i+1]:
temp = data[i]
data[i] = data[i+1]
data[i+1] = temp r1 = maopao(data,j+1)
return r1 li1 = [33,2,10,1]
ret = maopao(li1)
print(ret)

  小白高高兴兴把结果告诉了小刘

  小刘哈哈大笑,不过以前培训过的小白啊,居然还用到了递归,不过我这边还有一种代码更短的方案哦!想不想看?

  小白点点头

  小刘:其实可以再用一次循环,来替代递归的,你看

li = [11,33,56,27,756]
for j in range(1,len(li)): #注意这里range要从1开始 j:1,2,3...
for i in range(len(li)-j):
if li[i] > li[i+1]:
temp = li[i]
li[i] =li[i+1]
li[i+1] = temp print(li)

  小白看了,不停点头叫好

  小刘:冒泡排序就讲完了,今天到此为止啦

  小白:就讲完了啊,好吧!

  小刘:可以下班回家了,另外这个你可以回去看一下,二维数组的转换

data = [[col for col in range(4)] for row in range(4)]
print(data)
for i in data:
print(i)
结果为:
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]

  小刘:上面这个叫二维数组,转换思路如图:

  

#方法一:
data = [[col for col in range(4)] for row in range(4)]
print(data) for row in range(4):
for col in range(4):
if col > row:
temp = data[row][col]
data[row][col] = data[col][row]
data[col][row] = temp print(data)
#方法二:
data = [[col for col in range(4)] for row in range(4)]
print(data)
for i in data:
print(i) for m in range(4):
for n in range(4):
if n > m:
r_dt = data[m].pop(n)
c_dt = data[n].pop(m)
print('操作中:',data)
data[m].insert(n,c_dt)
data[n].insert(m,r_dt)
print('替换后:',data)

  小白:你辛苦了

  

欢迎大家对我的博客内容提出质疑和提问!谢谢

                                                                             笔者:拍省先生  

  

python基础-第五篇-5.1冒泡排序的更多相关文章

  1. python基础-第五篇-5.4正则表达式

    正则基础知识 正则表达式是通过调用re模块实现的 在python里,正则表达式处理对象为字符串,所以正则里方法和字符串的方法有很多相似的地方:re.findall和find,re.split和spli ...

  2. python基础-第五篇-5.3装饰器

    小白发呆的看着窗外,同事们陆陆续续的地来到公司,想起算法,小白就飘飘然了.突然后面传来一声呼唤,原来是小刘! 小刘:不好意思啊!堵车了,就来晚了点,不耽误你的时间,咱们就开启的今天的培训内容吧! 小白 ...

  3. python基础-第五篇-5.2递归

    又是一个阳光明媚的日子,小白看着刚刚从东边升起的太阳,感觉太阳爷爷也在向她打招呼,小白就不经的微笑起来!心想:今天又会学到什么有趣的东西呢?有些小期待,也有些小激动! 小刘来得比小白还早,两辆相视而笑 ...

  4. Python基础学习五

    Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...

  5. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  6. python基础-第六篇-6.2模块

    python之强大,就是因为它其提供的模块全面,模块的知识点不仅多,而且零散---一个字!错综复杂 没办法,二八原则抓重点咯!只要抓住那些以后常用开发的方法就可以了,哪些是常用的?往下看--找答案~ ...

  7. Python基础知识(五)------字典

    Python基础知识(四)------字典 字典 一丶什么是字典 ​ dict关键字 , 以 {} 表示, 以key:value形式保存数据 ,每个逗号分隔 ​ 键: 必须是可哈希,(不可变的数据类型 ...

  8. Python基础【第一篇】

     一.Python简介 Python的创始人(Guido von Rossum 荷兰人),Guido希望有一种语言既能像C一样方便地调用操作系统的功能接口,也能像shell脚本一样,轻松地实现编程,A ...

  9. python基础知识第一篇(认识Python)

    开发语言: 高级语言:python java php c++ 生成的字节码 字节码转换为机器码 计算机识别运行 低级语言:C 汇编 生成的机器码 PHP语言:适用于网页,局限性 Python,Java ...

随机推荐

  1. Cobbler无人值守安装系统

    环境说明 系统版本    CentOS 6.9 x86_64 Cobbler是一款Linux安装服务器,可以快速设置网络安装环境.它粘合在一起并自动执行许多相关的Linux任务,因此部署新系统时不必在 ...

  2. 2017.4.7 e.toString() 与 e.getMessage()的区别

    我使用的时候,抛出了空指针异常,本来是想将异常信息显示在errorInfo里,却发现没有拿到错误信息. 原因:我用的是getMessage(). 用e.getMessage() 时,返回的是null. ...

  3. Android Scroll具体解释(二):OverScroller实战

    作者: ztelur 联系方式:segmentfault,csdn.github 本文仅供个人学习,不用于不论什么形式商业目的,转载请注明原作者.文章来源.链接,版权归原文作者全部.  本文是andr ...

  4. Python类定义和类继承详解

    类实例化后,可以使用其属性,实际上,创建一个实例之后,可以通过类名访问其属性,如果直接使用类名修改其属性,那么直接影响已经实例化的对象. 类的私有属性: __private_attrs 两个下划线开头 ...

  5. jQuery.delegate() 函数详解

    delegate()函数用于为指定元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 即使是执行delegate()函数之后新添加的元素,只要它符合条件,绑定 ...

  6. html5 的a标签是可以拨电话的,通过其Href属性来实现

    <a href="tel:18700000000">点击给我打电话吧!</a> 注: 1.<a href="tel:18750000000& ...

  7. MVC组件分析

    MVC组件分析   2 System.Web.Mvc V 4.0.0.0 组件分析 2.1 Routing组件(路由选择) Routing的作用就是负责分析Url Action的要求• 必须是一个公有 ...

  8. 2010年imac从移动硬盘启动Win10

    虽然是个程序员,但也爱折腾. 原WIN10不想折腾,虚拟机折腾大点的软件太卡,不能完全发挥硬件水平. 原材料(硬件):2010年imac一台,80G移动硬盘一块(个人组装,硬盘盒+3.5寸IDE硬盘) ...

  9. reveal end of document

     window - Preferences - Run/Debug - Console 将 Console buffer size (characters)设置大一点

  10. [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在

    前言 检索一个字符串是否存在于一个数组中, 最主要的想法应该就是对数组进行循环, 逐个推断数组的每一个元素值和给定的值是否相等. (在Java语言还能够把数组转成 List , 在 list 中直接有 ...