python数据结构与算法——冒泡排序
用两种方式实现,非递归和递归
直接上代码:
先是失败的递归方式,涉及到对象引用的问题:
# 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数据结构与算法——冒泡排序的更多相关文章
- Python 数据结构与算法——冒泡排序
#方法一:递归 def bubble(lst,i): if i==1: return lst for j in range(i-1): if lst[j] > lst[j+1]: lst[j], ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- Python数据结构与算法之图的广度优先与深度优先搜索算法示例
本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...
- Python 数据结构和算法
阅读目录 什么是算法 算法效率衡量 算法分析 常见时间复杂度 Python内置类型性能分析 数据结构 顺序表 链表 栈 队列 双端队列 排序与搜索 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归 ...
- [py]数据结构和算法-冒泡排序
用Python实现的数据结构与算法 数据结构和算法可以培养一个人的逻辑思维(推荐几本书) 逻辑思维培养 严蔚敏的数据结构(排序 查找 列表 堆栈 队列 树的简单部分) 大话数据结构 数据结构与算法分析 ...
- Python数据结构与算法(几种排序)
数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是 ...
随机推荐
- EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字
EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字 Function 求数字和字母(对象 As String) '在文本与数字混杂中提取数字和字母 Dim myReg ...
- phonegap开发经验谈之一命令行建立项目和准备工作
一安装与配置 安装命令行配置,这个可以参见网上的.3.0的最好用命令行配置. 大家在安装android sdk的时候,会发现里面自带了一个eclipse,并且继承了adt,直接用这个就好了.当然你已经 ...
- Windows里面的hosts文件
一.什么是Hosts文件? hosts文件是一个用于储存计算机网络中各节点信息的计算机文件.这个文件负责将主机名映射到相应的IP地址.hosts文件通常用于补充或取代网络中DNS的功能.和DNS不同的 ...
- 无法获取有关Windows NT 组\用户‘组\用户’的信息,错误代码0x5(Microsoft SQL Server,错误:15404)
配置了复制,在删除某个发布的时候,突然报此错误,无法删除此发布: 使用语句修改: ALTER AUTHORIZATION ON DATABASE:: [数据库名] TO [sa] 即修改数据库的 ...
- android产品业务逻辑对app稳定影响太大
产品经理们, 看看你们的交互文档, 有n个逻辑分支, 在我们的实现中至少存在2*n个逻辑分支 这样极度造成了app的不稳定性,表现就是 非必须的bug很多.还有就是维护性极差 当然你们会说,你们可以写 ...
- JsTree
一.JStree的简单介绍 1.关于jstree jsTree 使用了 jQuery 和 Sarissa,是一个是免费的但是设置灵活的,基于 JavaScript 跨浏览器支持的网页树形部件. jsT ...
- CentOS 6.x 一键安装PPTP VPN脚本
环境 CentOS 6.x 32位/64位XEN/KVM/OpenVZ 步骤 依次运行下列命令 #wget http://www.hi-vps.com/shell/vpn_centos6.sh #ch ...
- mysql跟踪和日志
mysql 打开 general log 后,所有的查询语句都会记录在 general log 文件,文件为只读方式,但这样general log文件会非常大,所以默认是关闭的. 但有时需要查错等原因 ...
- C#高级进阶--重写函数
这里要说一下,重写是继承时发生,在子类中重新定义父类中的方法.例如:基类方法声明为virtual方法,派生类中使用override声明此方法的重写. 基类中的访问修饰符在子类中是不能被修改的.比如说基 ...
- react native ScrollView
ScrollView是一个通用的可滚动的容器,你可以在其中放入多个组件和视图,而且这些组件并不需要是同类型的.ScrollView不仅可以垂直滚动,还能水平滚动(通过horizontal属性来设置). ...