python基础-第五篇-5.1冒泡排序

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

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

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

  小刘:小白,过来!我先考考你,有这么一个列表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)

  小白看了,不停点头叫好

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

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

  小刘:可以下班回家了

  小白:你辛苦了

  

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

                                                                             笔者:拍省先生  

  

时间: 2024-10-13 00:51:24

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

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

正则基础知识 正则表达式是通过调用re模块实现的 在python里,正则表达式处理对象为字符串,所以正则里方法和字符串的方法有很多相似的地方:re.findall和find,re.split和split,re.sub和replace 普通字符和元字符 普通字符 大多数的字符和字母都为普通字符 元字符 在正则里,有其特殊的功能的字符称为元字符,如:. ^ $ * + ? {} | () \ .    除了换行符任意一个字符进行匹配 import re strs = 'ji154\n651jia*-

python基础-第五篇-5.2递归

又是一个阳光明媚的日子,小白看着刚刚从东边升起的太阳,感觉太阳爷爷也在向她打招呼,小白就不经的微笑起来!心想:今天又会学到什么有趣的东西呢?有些小期待,也有些小激动! 小刘来得比小白还早,两辆相视而笑打了一下招呼! 小刘:小白!你过来,让你思考一下这段代码是怎么个执行过程?就当拿来给你早上提提神,醒醒脑的吧? 小刘:我要去早会!你把这个好好想想,等下我回来的时候告诉我! 小白点点头,小白打量这段代码: def f1(): return 'f1' def f2(): r = f1() return

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

小白发呆的看着窗外,同事们陆陆续续的地来到公司,想起算法,小白就飘飘然了.突然后面传来一声呼唤,原来是小刘! 小刘:不好意思啊!堵车了,就来晚了点,不耽误你的时间,咱们就开启的今天的培训内容吧! 小白连忙说:没事,可以开始啦! 函数内存与执行函数 小刘:那我给你看一段代码,你看看会得到什么结果 def f1(): return 'F1' x = f1() print(x) x2 = f1 print(x2) 小白看了看,很快说出了x的输出值为‘F1’,但是看到x2这里,小白就有点想不通,小白就执

图解Python 【第五篇】:面向对象-类-初级基础篇

由于类的内容比较多,分为类-初级基础篇和类-进阶篇 类的内容总览图: 本节内容一览图: 今天只讲类的基础的面向对象的特性 前言总结介绍: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数,对象是一个类的实例 实例(instance):一个对象的实例化实现. 标识(identity):每个对象的实例都需要一个可

Python基础学习五

Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出键值对. for key in dict: #迭代键 for val in dict.value(): #迭代值 for k,v in dict.items(): #迭代键值对 当迭代列表时,通过内置函数enumerate()可以迭代出索引加值. for i in list #迭代列表 for i

python基础1--小结篇

如果有别的编程语言基础,python属于极好上手的一门语言.应用上,用“自取所需”来描述,最为贴切. 首先,放上一些推荐. 安装上: 1.python3.5.1(推荐官网直接下载,自带IDLE),安装不麻烦,记得增加环境变量即可 2.编辑器:sublime 其实,并没有使用很多,但是推荐的人超多 ,破解版网上很多,按资源下载即可 3.IDE: 强推 pycharm 对JetBrains软件执着的热爱  方便又美观 网上能找到找到注册码,学生用edu邮箱可以免费使用,当然,支持正版! 熟悉上: 语

python基础-第六篇-6.2模块

python之强大,就是因为它其提供的模块全面,模块的知识点不仅多,而且零散---一个字!错综复杂 没办法,二八原则抓重点咯!只要抓住那些以后常用开发的方法就可以了,哪些是常用的?往下看--找答案~ 模块定义 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成 (函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块.

Python基础学习 总结篇

Python基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结构(概要) Python学习(四)数据结构 —— int float Python学习(四)数据结构 —— str Python学习(四)数据结构 —— bool Python学习(四)数据结构 —— list tuple range Python学习(四)数据结构 —— set frozenset

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

Python基础知识(四)------字典 字典 一丶什么是字典 ? dict关键字 , 以 {} 表示, 以key:value形式保存数据 ,每个逗号分隔 ? 键: 必须是可哈希,(不可变的数据类型),必须是唯一的 ? 值: 任意数据类型 特点: ? 查询的效率非常高,通过key来查找元素 ? 内部使用key来计算一个内存地址(暂时), hash算法,key必须是不可变的数据类型(key 必须是可哈希的数据类型),key必须是不可变的数据类型 ? 字典是无序的, python3.6版本以上,默