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)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是 ...
随机推荐
- PHP创建数据库数据表
PHP创建数据库数据表 <?php $con = mysql_connect('localhost', 'root', 'root'); /************************在数据 ...
- EasyUI关于 numberbox,combobox,validatebox 的几个小问题
在最近的项目中,首次使用到了 网页的一个布局框架——EasyUI,感觉这个框架特别牛,兼容性很不错,页面效果也挺不错,可是在使用标题上三个控件过程中遇到几个很奇特的问题,让我头疼不已,所以在此给广大I ...
- 利用excel拆分数据
要求:将sheet1中的数据按照公司名称拆分到不同的工作表 使用VBA: 1:打开sheet1的查看代码 2:运行 ·········································· ...
- tcp/ip详解-ip头部选项字段
IP头部的选项字段 作用:用于网络调试和测试 IP首部的可变部分就是一个可选字段.选项字段用来支持排错.测量以及安全等措施,内容很丰富.此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目 ...
- iOS用ASIHttpRequest上传
1.新建一个single view工程,导入ASIHttpRequest库,导入MobileCoreServices.CFNetwork.SystemConfiguration和libz1.2.5.d ...
- Shell 教程
Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操 ...
- html知识——表单
1.表单标记:<form>内容</form> 属性: name(表单名称) 必须写!!! method(传送数据方式): get--将表单的内容附加在URL地址的后面 ...
- git: No refs in common and none specified; doing no
用gitolite新建项目,clone后首次push,可能会出现: $ git push No refs in common and none specified; doing nothing ...
- Yii1.1.16的安装(windows)
下载yii1.1.16 http://pan.baidu.com/s/1mgyAOnI 解压后放到D盘,并重新命名为yii1.1.16,我是直接放在开发的目录下面 按"Window + R& ...
- iis 301重定向
把www.a.com重定向到www.b.com 只需在www.a.com上面右键属性---主目录,重定向到url,下面填上www.b.com,再把资源永久重定向勾选上即可. 注意,如果你需要把域名后面 ...