专栏首页Python_base新萌学Python之 冒泡算法排序
原创

新萌学Python之 冒泡算法排序

        忆往昔,我在初入it江湖时,头一次interview时被问一个问题就是冒泡算法排序手写,一开始是懵的,为什么呢,因为刚从学校毕业,实习期面试,因为本科学的是信息管理,半路出家,对编程产生兴趣,从大二试着自己学学,那时候网上找入门,那时候玩心重,c是真学不进去,java相继无缘,误打误撞,用python写出大多数前辈都经历过的事,'hello python',执行后弹出的输出,那时候就跟在沙滩晒太阳,一个美女突然叫你给她后背摸防晒霜一般!. ... .. .跑题了,为什么决定开始写一些学习中的记录呢,以后老了,给孙子吹啊!开个玩笑,其实就是想多学习,不足之处,希望各位前辈斧正,

Bubble

Python中自带有排序函数sort和sorted两种方法:

sort()是python中list自带的排序方法,直接list.sort()调用既可,直接原列表排序,不返还新列表;

sorted()是python内置的全局方法来对可迭代的序列排序生成新的序列.即需要参数接收.

两个方法都有两个参数(key, reverse)

key:key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较

reverse:是否倒序排序,true or false

而今天谈的冒泡算法排序

原理:

是一个简单的排序算法,它重复地遍历要排序的数列,依次比较两个元素,如果前者比后者大就进行交换操作.遍历数列的循环进行直接没有再需要交换,这数列已经排序完成.算法因为越小的元素会经过交换操作慢慢浮出到数量的顶端所以得名冒泡算法.

demo如 图1 下:

图1

        其原理就是通过列表中的元素两两比较,大的就右移,代码通过2层循环,外层循环决定排序的列表要循环几次,

        而内层循环是每一次外循环,会把列表按大到小的顺序的依次把元素大的移动到最右边,

图1.1

        图1.1这是代码执行的过程,^3^

        但是冒泡算法有些缺点,比如一个列表[1, 2, 3, 5, 4]就最后两个元素需要排序,但是上面的代码还是会从头到尾循环一遍!

优化1

图2.1

        图2.1,优化1中,给外层for循环加 a 标记初始值Flase,如果内层有改动,改变a=True,如果没有改动,内层循环结束后,执行if判断,a为初始值Flase,就是列表没有交换,那么就直接break循环即可.

图2.2

        图2.2 是对图2.1 中的代码进行优化,添加的功能是使排序正反都进行一遍在一次外循环中,这样是不是就提高了工作效率了哈!

        我们还可以试试下面 图3 demo. 又称鸡尾酒排序(双向冒泡算法)

鸡尾酒排序

让排序一次循环,可以相对左右各排一次,相对基础的冒泡算法来说,对于大量数据的排序来说,可以节省了时间,虽然我两次程序执行时间都是0.1s, 毕竟是小数据嘛!!! @_@

感谢各位的观看!!!小弟在此谢过,欢迎各位大佬斧正!!!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python-with&contextlib浅见

    这样呢,打开文件操作后,必须需要手动关闭文件,如果没有.close ,系统资源会一直被占用,而且还有一点,系统同一时间打开文件的数量也有限.

    Bobby_Y
  • 【数据结构】七大排序算法

    排序的相关概念 排序的分类 根据在排序过程中带排序的记录是否全部被放置在内存中,排序分为: 内排序 外排序 1.内排序 内排序是在排序整个过程中,带排序的所有...

    我就是马云飞
  • 对IMP-00013问题的思考(r3笔记第71天)

    对于IMP的问题或者是各类ORA问题,如果碰到的时候使用oerr是一个很不错的参考方案。比如对于ora错误12041的解释如下。 > oerr ora 1204...

    jeanron100
  • GO语言学习:go语言实现android应用的步骤

    go语言在1.4版本就提供了编辑Android应用的功能,但当时最简单的方法是使用Docker来配置,而且在编辑和导入过程也不是很方便。 在go语言1.5以后提...

    李海彬
  • C# 委托进阶

    本文参考自:https://wenku.baidu.com/view/41ab91d3c1c708a1284a44d7.html?qq-pf-to=pcqq.c...

    郑小超.
  • GBDT+LR算法解析及Python实现

    参考:https://www.cnblogs.com/wkang/p/9657032.html

    用户2769421
  • GBDT+LR算法解析及Python实现

    本质上 GBDT+LR 是一种具有 stacking 思想的二分类器模型,所以可以用来解决二分类问题。这个方法出自于 Facebook 2014 年的论文 Pr...

    统计学家
  • Mysql - JOIN 详解

    一个完整的SQL语句中会被拆分成多个子句,子句的执行过程中会产生虚拟表(vt),但是结果只返回最后一张虚拟表。从这个思路出发,我们试着理解一下JOIN查询的执行...

    程序员宝库
  • 数据库MySQL中的JOIN详解

    一个完整的SQL语句中会被拆分成多个子句,子句的执行过程中会产生虚拟表(vt),但是结果只返回最后一张虚拟表。从这个思路出发,我们试着理解一下JOIN查询的执行...

    程序你好
  • 微信快速开发框架(五)-- 利用快速开发框架,快速搭建微信浏览博客园首页文章

    这几天接连发布了《快速开发微信公众平台框架---简介》和《体验微信公众平台快速开发框架》几篇关于微信平台的文章,不过反响一般,可能需求不是很多吧。闲来无事,还是...

    脑洞的蜂蜜

扫码关注云+社区

领取腾讯云代金券