菜鸟学python - 排序

本文介绍了一个初学者使用Python实现多种排序算法的过程,并比较了它们的执行效率。包括冒泡排序、直接插入排序、快速排序及堆排序等算法,并利用matplotlib绘制了随机生成的2000个正整数的分布图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始学习Python了,练手一下吧。一些很基本的东西,代码写得很幼稚,但也算是一点点的进步吧。
代码在python 2.7下测试通过,使用的编辑器为Spyder。

我感觉Spyder挺好的,本来想用NetBeans7.0.1,但安装好后总是在logo画面秒退。唉,悲剧了。Python排序算法 - 菜鸟学Python - 梦想社 - 梦想社

不说了,上代码 ~Python排序算法 - 菜鸟学Python - 梦想社 - 梦想社

顺便用Python的matplot把随机生成的2000个正整数给画出来了。

  Python排序算法 - 菜鸟学Python - 梦想社 - 梦想社
  这不是数学中严格意义上的随机分布。

001  # -*- coding: utf-8 -*-
002  """
003  Created on Wed Sep 28 16:58:29 2011
004 
005  @author: Guo
006  """
007  import  time 
008  import  random 
009  import  numpy  as np
010  import  matplotlib
011  import  matplotlib.pyplot  as  plt
012 
013  randomList  =  []
014  maxValue  =  2000
015  numberRandom  =  2000
016 
017  """
018  直接插入排序
019  """
020  def  insert_Sort( data ):
021      for  i  in  range( 1 ,  len( data )):
022          temp  =  data [ i ]     #data[i] is to insert
023          j  =  i  -  1
024          while  j  >=  0  and  temp  <  data [ j ]:
025              data [ j  +  1 ]  =  data [ j ]
026              j  =  j  -  1
027          if  j  <>  i  -  1 :
028              data [ j  +  1 ]  =  temp      #insert temp
029      sortedData  =  data
030      return  sortedData
031     
032  """
033  随机数构造函数
034  """
035  def  createRandomList ():
036      for  i  in  range( numberRandom ):
037          randomList . append( random . randint( 1 , maxValue));
038 
039  """
040  冒泡排序
041  """  
042  def  bubblesort( data ):
043      sortedData  =  []
044      for  i  in  range( len( data-  1 ,  1 ,  - 1 ):
045          for  j  in  range( 0 ,  i ):
046              if  data [ j ]  >  data [ j  +  1 ]:
047                  data [ j ],  data [ j  +  1 ]  =  data [ j  +  1 ],  data [ j ]
048      sortedData  =  data
049      return  sortedData    
050 
051  """
052  希尔排序
053  """   
054  def  shell_Sort( data , n  =  None ):
055      if n  ==  None :
056         n  =  len( data/  2
057          if n  %  2  ==  0 :
058             n  = n  +  1
059      for  i  in  range( 0 , n ):
060          newdata  =  data [ i : len( data ):n ]
061          insert_sort( newdata)
062          data [ i : len( data ):n ]  =  newdata
063      if n  <>  1 :
064          d  = n  /  2
065          if  d  %  2  ==  0 :
066              d  =  d  +  1
067          shell_Sort( data ,  d)
068         
069  """
070  快速排序
071  """
072  def  quickSort( data ,  low  =  0 ,  high  =  None ):
073      if  high  ==  None :
074          high  =  len( data-  1
075      if  low  <  high :
076         s ,  i ,  j  =  data [ low ],  low ,  high
077          while  i  <  j :
078              while  i  <  j  and  data [ j ]  >= s :
079                  j  =  j  -  1
080              if  i  <  j :
081                  data [ i ]  =  data [ j ]
082                  i  =  i  +  1
083              while  i  <  j  and  data [ i ]  <= s :
084                  i  =  i  +  1
085              if  i  <  j :
086                  data [ j ]  =  data [ i ]
087                  j  =  j  -  1
088          data [ i ]  = s
089          quickSort( data ,  low ,  i  -  1)
090          quickSort( data ,  i  +  1 ,  high)
091 
092  """
093  堆排序
094  """
095  def  heap_Adjust( data , s ,  m ):
096      if  2  * s  >  m :
097          return
098      temp  = s  -  1
099      if  data [ 2 *-  1 ]  >  data [ temp ]:
100          temp  =  2  * s  -  1
101      if  2  * s  <=  m  -  1  and  data [ 2 *s ]  >  data [ temp ]:
102          temp  =  2  * s
103      if  temp  <> s  -  1 :
104          data [-  1 ],  data [ temp ]  =  data [ temp ],  data [-  1 ]
105          heap_Adjust( data ,  temp  +  1 ,  m)
106  def  heap_sort( data ):
107      m  =  len( data/  2
108      for  i  in  range( m ,  0 ,  - 1 ):
109          heap_Adjust( data ,  i ,  len( data))
110      data [ 0 ],  data [ - 1 ]  =  data [ - 1 ],  data [ 0 ]
111      for n  in  range( len( data-  1 ,  1 ,  - 1 ):
112          heap_Adjust( data ,  1 , n)
113          data [ 0 ],  data [-  1 ]  =  data [-  1 ],  data [ 0 ]
114 
115  """---------------------------以上是函数定义-----------------------------------"""
116 
117  """     
118  显示随机数
119  """     
120  createRandomList()
121  print  "The random numbers are:"
122  print  randomList 
123   
124  """
125  显示冒泡排序所需时间
126  """ 
127  starttime  =  time . clock()    
128  createRandomList()
129  bubblesort( randomList)
130  print  "After the bubblesot, the sequence numbers are:"
131  print  bubblesort( randomList)
132  endtime  =  time . clock() 
133  print  "The bubblesort time cost is:" , ( endtime - starttime)
134 
135  """  
136  显示直接插入排序所需时间
137  """
138  starttime  =  time . clock()  
139  createRandomList()
140  insert_Sort( randomList)
141  endtime  =  time . clock() 
142  print  "The insert_Sort time cost is :" , ( endtime - starttime)
143 
144  """  
145  显示快速排序所需时间
146  """
147  starttime  =  time . clock()  
148  createRandomList()
149  quickSort( randomList)
150  endtime  =  time . clock() 
151  print  "The quickSort time cost is :" , ( endtime - starttime)
152 
153  """  
154  显示堆排序所需时间
155  """
156  starttime  =  time . clock()  
157  createRandomList()
158  heap_Adjust( randomList)
159  endtime  =  time . clock() 
160  print  "The heap_Adjust cost is :" , ( endtime - starttime)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值