【Python排序搜索基本算法】
文章平均质量分 65
充分利用python自己特有的优点,简洁而清晰地实现基本排序算法和基本搜索算法。本专栏假定读者有算法的基本知识,重点介绍代码的实现,一起品味python独到而优美之处吧~^_^
littlethunder
Python shake the world
展开
-
【Python排序搜索基本算法】之拓扑排序
拓扑排序是对有向无环图的一种排序,满足如下两个条件:1.每个顶点出现且只出现一次;2.若A在序列中排在B的前面,则在图中不存在从B到A的路径。如上的无环有向图,v表示顶点:v=['a','b','c','d','e'],e表示有向边:e=[('a','b'),('a','d'),('b','c'),('d','c'),('d','e'),('e','c')],代码如下:原创 2014-04-19 15:35:32 · 11216 阅读 · 2 评论 -
【Python排序搜索基本算法】之堆排序
堆是一种完全二叉树,堆排序是一种树形选择排序,利用了大顶堆堆顶元素最大的特点,不断取出最大元素,并调整使剩下的元素还是大顶堆,依次取出最大元素就是排好序的列表。举例如下,把序列[26,5,77,1,61,11,59,15,48,19]排序,如下:原创 2014-04-16 21:47:36 · 11110 阅读 · 0 评论 -
【Python排序搜索基本算法】之二叉树的深度和宽度
接着上一个二叉树的主题,用python写一下求二叉树深度和宽度的代码,求深度用递归;求宽度用队列,然后把每层的宽度求出来,找出最大的就是二叉树的宽度,如下:import queueclass Node: def __init__(self,value=None,left=None,right=None): self.value=value self.left=le原创 2014-04-15 09:41:53 · 11978 阅读 · 2 评论 -
【Python排序搜索基本算法】之Dijkstra算法
Dijkstra算法和前一篇的Prim算法非常像,区别就在于Dijkstra算法向最短路径树(SPT)中添加顶点的时候,是按照ta与源点的距离顺序进行的。OSPF动态路由协议就是用的Dijkstra算法。下面还以那个图的例子为例:代码如下:_=float('inf')def dijkstra(graph,n): dis=[0]*n flag=[False]*n pre=[原创 2013-08-04 17:50:14 · 24869 阅读 · 18 评论 -
【Python排序搜索基本算法】之Prim算法
Prim算法是实现最简单的最小生成树(MST)算法,适合于稠密图。要实现Prim算法,我们主要关注的是增量的变化,也就是从每个非树顶点到树顶点的最短距离,使得最后生成一棵包括所有顶点的树,并且这棵树的边权值之和最小。下面用一个例子说明:代码如下:_=float('inf')def prim(graph,n): dis=[0]*n pre=[0]*n flag=[False原创 2013-08-04 17:35:15 · 6663 阅读 · 1 评论 -
【Python排序搜索基本算法】之二叉树的遍历
先给出二叉树节点的python表示:class Node: def __init__(self,value=None,left=None,right=None): self.value=value self.left=left self.right=right 再给出二叉树前序,中序,后序遍历:def preTraverse(root): if root原创 2013-08-01 21:20:48 · 13286 阅读 · 0 评论 -
【Python排序搜索基本算法】之快速排序
快速排序应用范围最为广泛,C语言标准库里的qsort应用的就是快速排序的方法。首先要选择一个划分元素,我在程序中选择seq[0],就是第一个元素;然后在seq[1:] 即从第二个元素到最后一个元素之间,选择比这个划分元素小的放到前面,选择比这个划分元素大的放到后面;这样采用分治法不断缩小范围,自顶向下进行。代码如下:def qsort(seq): if seq==[]: return [原创 2013-07-25 18:52:33 · 3802 阅读 · 1 评论 -
【Python排序搜索基本算法】之归并排序
归并排序最令人兴奋的特点是:不论输入是什么样的,它对N个元素的序列排序所用时间与NlogN成正比。代码如下:def mergesort(seq): if len(seq)<=1: return seq mid=int(len(seq)/2) left=mergesort(seq[:mid]) right=mergesort(seq[mid:]) return merge(left原创 2013-07-25 18:37:58 · 16264 阅读 · 1 评论 -
【Python排序搜索基本算法】之希尔排序
希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率。希尔排序最关键的是选择步长,本程序选用Knuth在1969年提出的步长序列:1 4 13 40 121 364 1093 3280 。。。后一个元素是前一个元素*3+1,非常方便选取,而且效率还不错。代码如下:def shellSort(seq): length=len(seq) inc=0 while inc<=le原创 2013-07-25 18:33:19 · 5701 阅读 · 1 评论 -
【Python排序搜索基本算法】之冒泡排序
冒泡排序和选择排序类似,也是第n次把最小的元素排在第n的位置上,也是该元素的绝对位置,只是冒泡排序的过程中,其他的元素也逐渐向自己最终位置逼近。代码如下:def bubbleSort(seq): length=len(seq) for i in range(length): for j in range(length-1,i,-1): if seq[j-1]>seq[j]:原创 2013-07-21 19:42:42 · 2301 阅读 · 0 评论 -
【Python排序搜索基本算法】之选择排序
选择排序就是第n次把序列中最小的元素排在第n的位置上,一旦排好就是该元素的绝对位置。代码如下:def selectionSort(seq): length=len(seq) for i in range(length): mini=min(seq[i:]) if seq[i]>mini: j=seq.index(mini,i) seq[i],seq[j]=seq[j],原创 2013-07-21 19:39:01 · 2997 阅读 · 0 评论 -
【Python排序搜索基本算法】之插入排序
插入排序生活中非常常见,打扑克的时候人的本能就在用插入排序:把抽到的一张插入到手上牌的正确位置上。有两种插入排序方法,一种基于比较,另一种基于交换。代码如下:1.基于比较的插入排序:def insertionSort(seq): length=len(seq) for i in range(1,length): tmp=seq[i] for j in range(i,0,-1)原创 2013-07-21 19:34:57 · 2996 阅读 · 0 评论