Python天天美味(30) - python数据结构与算法之快速排序

简介:

快速排序的原理是将取出第一个数,将整个数组分为两波,一拨都大于这个数,另一波都小于这个数,然后递归用同样的方法处理第一波数字和第二波数字。都说是“快速排序”,效率肯定比其他的一般排序算法高,下面我们就来验证一把,比较一下所谓的“快速排序”和“冒泡排序”的性能差异。

1. 快速排序

def  quicksort ( data ,  low  =  0 ,  high  =  None ):
     if  high  ==  None :
         high  =  len ( data )  -  1
     if  low  <  high :
         s ,  i ,  j  =  data [ low ],  low ,  high
         while  i  <  j :
             while  i  <  j  and  data [ j ]  >=  s :
                 j  =  j  -  1
             if  i  <  j :
                 data [ i ]  =  data [ j ]
                 i  =  i  +  1
             while  i  <  j  and  data [ i ]  <=  s :
                 i  =  i  +  1
             if  i  <  j :
                 data [ j ]  =  data [ i ]
                 j  =  j  -  1
         data [ i ]  =  s
         quicksort ( data ,  low ,  i  -  1 )
         quicksort ( data ,  i  +  1 ,  high )

2. 冒泡排序

def  bubblesort ( data ):
     for  i  in  range ( len ( data )  -  1 ,  0 ,  - 1 ):
         for  j  in  range ( 0 ,  i ):
             if  data [ j ]  >  data [ j  +  1 ]:
                 data [ j ],  data [ j  +  1 ]  =  data [ j  +  1 ],  data [ j ]

 

3. 性能比较 

上面看来,冒泡排序只需要5行,够简洁的,但性能咋样呢?来比较一下吧:

import  random
import  datetime
import  copy

def  sort_perfmon ( sortfunc ,  data ):
     sort_data  =  copy . deepcopy ( data )
     t1  =  datetime . datetime . now ()
     sortfunc ( sort_data )
     t2  =  datetime . datetime . now ()
     print  sortfunc . __name__ ,  t2  -  t1
     #print sort_data

data  =  [ random . randint ( 0 ,  65536 )  for  i  in  range ( 2000 )]
#print data
sort_perfmon ( quicksort ,  data )
sort_perfmon ( bubblesort ,  data )

 

4. 结果

通过对随机的2000个数字进行排序,下面的结果可非常容易的看出,快速排序的优势是非常大的。

quicksort  0:00:00.062000
bubblesort  0:00:03.563000

 

5. 代码下载

http://files.cnblogs.com/coderzh/Code/sorttest.rar 

 

 

Python 天天美味系列(总)

Python 天天美味(28) - urlopen    

Python 天天美味(29) - 调用VC++的动态链接库(DLL) 

Python 天天美味(30) - python数据结构与算法之快速排序 

Python 天天美味(31) - python数据结构与算法之插入排序 

Python 天天美味(32) - python数据结构与算法之堆排序 

...

 


本文转自CoderZh博客园博客,原文链接:http://www.cnblogs.com/coderzh/archive/2008/09/20/1294947.html,如需转载请自行联系原作者

目录
相关文章
|
19天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
5天前
|
算法 数据可视化 Python
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
|
5天前
|
数据可视化 算法 数据挖掘
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
|
6天前
|
算法 数据可视化 Python
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
11 0
|
6天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
17 0
|
7天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
44 0
|
7天前
|
缓存 算法 Python
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
|
10天前
|
算法 数据可视化 数据挖掘
使用Python实现DBSCAN聚类算法
使用Python实现DBSCAN聚类算法
149 2
|
11天前
|
存储 算法 安全
Python加密算法有哪些?有什么作用?
这些加密算法的作用在于保护敏感数据的隐私和完整性。它们可以用于数据传输、存储、身份验证和数字签名等领域。通过加密,可以确保数据在传输和存储过程中不被未经授权的人访问或篡改。同时,数字签名可以用于验证数据的来源和完整性,防止数据被篡改或冒充。不同的加密算法在不同的应用场景中起到不同的作用,选择合适的算法取决于安全需求和性能要求。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
6 0
|
12天前
|
算法 数据可视化 数据挖掘
使用Python实现K均值聚类算法
使用Python实现K均值聚类算法
16 1