首先说一下 冒泡排序 是怎么做的:

总体的想法是,把小的轻的浮上前面去,把大的重的沉到后面去。

这样设置两个指针,i j,

1. i标识每一趟循环。这一趟的目的是把后面那些未排序的数列中最小的浮上前面去。

2. j标识的就是一趟中,具体是怎么找到最小最轻的数的过程。j从末尾开始,逐个与自己前一个数比较大小,如果后面的数小于前面的数,就交换位置,让小的往前窜一个,否则就不动。然后j--,指向前一个,再比较相邻的数大小,直到 j 循环到i的位置,因为i之前的都是排序好的,不用在排了。

3. 一趟下来,整个数列中最小最轻的就浮到前面去了,然后i++,把i指向第二个位置,也就是要在剩下的数列中找到第二轻的数然后放着i这里。如此循环下去,直到i到了倒数第二个数,因为剩最后一个数就不用排。

上代码,几乎每行都有注释:

#encoding:utf-8

"""
首先要知道 l.sort() 的list内建函数可以直接实现排序的目的
或者 sorted() 内建函数
区别在于前者原地更改list 后者返回新的副本
""" #由于命令行参数是按照字符串的形式接收的,所以split一下转换为list
l = raw_input("输入数字们,空格分割:").split(' ')
lenth = len(l) #在list中的每个元素有都是字符串,所有又每个都转成float
for i in range(lenth):
l[i] = float(l[i]) #i j 都是下标,i之前都是排序好的,j之后都是未排序的
#range()给lenth-1的话,i就不用指向l的最后一个元素,因为剩最后一个了就完事了,不用排了,j也是一样。
for i in range(lenth-1):
#j给的是 从i到末尾,不含i,这样就是只排序i后面那些没排序的,循环到i就不用在往前了,因为前面都是排好的
#末尾-1是倒序生成,因为i从前向后循环,j从后先前循环,所以是返的
for j in range(lenth-1, i, -1):
#冒泡是把小的浮上前面去
if l[j] < l[j-1]:
l[j], l[j-1] = l[j-1], l[j] print l

运行一下 come on baby:

输入:234 24 54 -234 0 -23 -2 345 4.5 656.4 56.345

输出:[-234.0, -23.0, -2.0, 0.0, 4.5, 34.0, 54.0, 56.345, 234.0, 345.0, 656.4]

算法 python实现(二) 冒泡排序的更多相关文章

  1. 三种排序算法python源码——冒泡排序、插入排序、选择排序

    最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...

  2. python排序之二冒泡排序法

    python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...

  3. Python之排序算法:快速排序与冒泡排序

    Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...

  4. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  5. 【算法】改进的冒泡排序 O(n^2) 稳定的 C语言

    改进的冒泡排序 一.算法描述 基于原冒泡排序 每次选取第一个元素作为主元往后进行比较,若遇到比它小的则放到它左边(即进行交换),若遇到比它大的则选取大的作为主元进行后续比较,每趟选取了无序列中最大元素 ...

  6. pageRank算法 python实现

    一.什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO( ...

  7. 有关python下二维码识别用法及识别率对比分析

    最近项目中用到二维码图片识别,在python下二维码识别,目前主要有三个模块:zbar .zbarlight.zxing. 1.三个模块的用法: #-*-coding=utf-8-*- import ...

  8. 数据结构与算法-Python/C(目录)

    第一篇 基本概念 01 什么是数据结构 02 什么是算法 03 应用实例-最大子列和问题 第二篇 线性结构 01 线性表及其实现 02 堆栈 03 队列 04 应用实例-多项式加法运算 05 小白专场 ...

  9. Python实现二叉堆

    Python实现二叉堆 二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树).二叉堆有两种:最大堆和最小堆.最大堆:父结点的键值总是大于或等于任何一个子节点的键值:最小堆: ...

随机推荐

  1. C++ 智能指针auto_ptr详解

    1. auto_ptr 的设计动机: 函数操作经常依照下列模式进行: 获取一些资源 执行一些动作 释放所获取的资源 那么面对这些资源的释放问题就会出现下面的两种情况: 一开始获得的资源被绑定于局部对象 ...

  2. 浅析JAVA设计模式(二)

    2. 里氏替换原则:LSP(Liskov Substitution Principle)里氏替换原则,定义为只要父类出现的地方子类就可以出现,而且用子类替换后,程序也不会出现问题,使用者根本不用关心是 ...

  3. 利用OllyDebug查看程序调用的dll模块

    最近在做一个Qt项目,在产品发布的时候一直为找不到程序到底缺少了哪些dll组件而困扰.具体问题是,在我的项目中使用到了QMediaPlayer播放一段音频文件,我使用的开发环境的Win7 32位,而在 ...

  4. 诡异的XmlSerializer属性字段Specified

    自动生成代码时,往往会为一个字段假设为 * , 生成另一个bool型字段: *Specified: 如: [Serializable] public class A { [XmlElement] pu ...

  5. 做个无边框winform窗体,并美化界面

    今天下午程序写完,有些时间就搞下界面美化,做个无框窗体.首先把窗体的FormBorderStyle设置为None,就变成无框的啦,不过你会发现这样窗体上就没有原来的最大最小化和关闭按钮了哦,所以要自己 ...

  6. PHP小记录

    正的framework(大量使用)      thinkphp(部分使用)      cakephpyii(极少使用) [一]函数    1:函数的声明:每个函数的第一行都是函数开头,有声明函数的关键 ...

  7. python三级菜单的实现

    一.作业要求 1.使用字典实现三级菜单功能 2.直接输入前面数字进入下一级菜单 3.按B返回上一级,按Q退出 二.需要知识点 1.if循环 2.for循环,enumerate的用法 3.while循环 ...

  8. ul动态增加li

    --> aaa bbb <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  9. PHP、JSP、.NET各自的真正优势是什么

    PHP的优势在于, 跨平台, 极易部署, 易维护, 为Web而生, 开源社区强大, 文档丰富.至于说3足鼎立, 谈不上, 全球前100万的sites中, 70%是PHP. JSP和Asp..net 也 ...

  10. ubuntu中vi在编辑状态下方向键不能用的解决

    ubuntu中vi在编辑状态下方向键不能用,还有回格键不能删除等,我们平时习惯的一些键都不能使用. 解决办法: 可以安装vim full版本,在full版本下键盘正常,安装好后同样使用vi命令. 安装 ...