用两种方式实现,非递归和递归

直接上代码:

先是失败的递归方式,涉及到对象引用的问题:

 # Bad  想一想为啥不行?
def bubblesort_rec_bad(A):
if len(A)==1: # 只剩一个数时 直接返回结束递归
return for j in range(len(A)-1):
if A[j] < A[j+1]: # 依次比较两个相邻的数
A[j], A[j+1] = A[j+1], A[j] #交换两个相邻的数 # 比较余下n-1个数
bubblesort_rec_bad(A[:-1]) # <<关键在与深复制的问题

下面是运行结果

    # 错误递归
A = [12,35,99,16,76]
bubblesort_rec_bad(A)
print "bad rec: ",A >>>bad rec: [35, 99, 16, 76, 12]

递归调用的参数传递中,A[:-1] 表示列表A的前n-1个元素,并将其值复制一份获得一个新的列表(:),

用C语言说,传入的其实是形参

正确的递归方式可以这样子弄:

 def bubblesort_rec(A,i):
if i==1: # 只剩一个数时 直接返回结束递归
return
for j in range(i-1):
if A[j] < A[j+1]: # 依次比较两个相邻的数
A[j], A[j+1] = A[j+1], A[j] #交换两个相邻的数
# 比较余下n-1个数
bubblesort_rec(A,i-1)

结果:

# 正确递归
A = [12,35,99,16,76]
bubblesort_rec(A, len(A))
print "good rec:",A good rec: [99, 76, 35, 16, 12]

不用递归也是可以的,用两层循环

 # 冒泡排序 二层循环格式
def bubblesort(A):
n = len(A)
for i in range(n,1,-1): # i = n, n-1, n-2, ..., 2
# 截取 A 的前i个元素进行冒泡
for j in range(i-1):
if A[j] < A[j+1]: # 依次比较两个相邻的数
A[j], A[j+1] = A[j+1], A[j] #交换两个相邻的数
 # 循环格式
A = [12,35,99,16,76]
bubblesort(A)
print "no rec: ",A >>>no rec: [99, 76, 35, 16, 12]

python数据结构与算法——冒泡排序的更多相关文章

  1. Python 数据结构与算法——冒泡排序

    #方法一:递归 def bubble(lst,i): if i==1: return lst for j in range(i-1): if lst[j] > lst[j+1]: lst[j], ...

  2. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  3. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  4. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  5. Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

  6. Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...

  7. Python 数据结构和算法

    阅读目录 什么是算法 算法效率衡量 算法分析 常见时间复杂度 Python内置类型性能分析 数据结构 顺序表 链表 栈 队列 双端队列 排序与搜索 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归 ...

  8. [py]数据结构和算法-冒泡排序

    用Python实现的数据结构与算法 数据结构和算法可以培养一个人的逻辑思维(推荐几本书) 逻辑思维培养 严蔚敏的数据结构(排序 查找 列表 堆栈 队列 树的简单部分) 大话数据结构 数据结构与算法分析 ...

  9. Python数据结构与算法(几种排序)

    数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是 ...

随机推荐

  1. powerdesinger中建立一个表后,出现Existence of index的警告

    可以不检查 Existence of index 这项,也就没有这个警告错误了!意思是说没有给表建立索引,而一个表一般至少要有一个索引,这是一个警告,不用的话对执行没有影响~ 转载:http://bl ...

  2. Linux高级权限管理 - ACL

    传统权限模型缺点: 传统的UGO权限模型无法应对负责的权限设置要求,如对于一个文件只能设置一个组,并且对该组进行权限控制,但是如果该文件有多个组合会对其进行访问,并且都要要求权限限制时,传统的UGO模 ...

  3. jQuery核心之jQuery Object及其相关的常用方法

    1.jQuery Object 和 原生的DOM对象之间有许多方法是不一样的,用jQuery的方法大部分情况下返回的是jQuery Object,但是jQuery也提供了一些方法可以很轻松的获取原生的 ...

  4. Linux下文件删除的原理

    Linux文件删除的原理: Linux是通过link的数量来控制文件的删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除,一般来说每个文件都有2个link计数器:i_count和i_n ...

  5. JavaEE开发环境搭建(1)---(jdk的安装)

    ----------我是前言---------- 有时候从网上找资料真的是一件很开(dan)心(teng)的事情, 因为很多你想要了解的东西总是很巧妙的被略去了... 或者... 根本没有... 真是 ...

  6. Centos7 搭建 Keepalived+LVS 备注

    NAT模型需要RealServer gateway设定为,DR模式需要执行 RealServer.sh.需要先安装network-tools. #!/bin/bash#description : st ...

  7. javascript复习总结

    改变HTML内容:document.getElementById(id).innerHTML = new HTML; 改变HTML属性:document.getElementById(id).inne ...

  8. C#窗体 WinForm 对话框,流

    一.对话框 ColorDialog:颜色选择控件 private void button1_Click(object sender, EventArgs e) { //显示颜色选择器 colorDia ...

  9. QT打开ROS工作空间时遇到的问题和解决方法

    之前一直觉得不用IDE写程序看着好像我很能的样子. 其实就相当于工业时代我还钻木取火并且告诉别人你们用打火机根本不知道火被点燃的过程是怎样的. 因为这个技能并非人人都会,就可以拿出去到处臭屁 好了, ...

  10. BZOJ1778 [Usaco2010 Hol]Dotp 驱逐猪猡

    首先我们列出转移矩阵$M$,$M_{i, j} = \frac {1 - \frac{p} {q}} {deg[i]}$(i,j之间有边)or $M_{i, j} = 0$(i,j之间没边) 则这个矩 ...