几种Python实现的排序算法
来源: 阅读:717 次 日期:2015-04-15 15:16:20
温馨提示: 小编为您整理了“几种Python实现的排序算法”,方便广大网友查阅!

这几种算法包括了:冒泡排序,插入排序,选择排序,快速排序和希尔排序,Python版本:2.7.3,具体代码如下:

import sys, getopt, random

def bubble_sort(seq):

for i in range(len(seq)):

for j in range(1,len(seq)):

if seq[j-1]>seq[j]:

seq[j-1], seq[j]= seq[j], seq[j-1]

return seq

def insertion_sort(seq):

for i in range(1,len(seq)):

tmp=seq[i]

pos=i;

for j in range(i-1,-1,-1):

if seq[j]>tmp:

seq[j+1]=seq[j]

pos=j

seq[pos]=tmp

return seq

def selection_sort(seq):

for i in range(len(seq)):

min_index=i;

for j in range(i,len(seq)):

if seq[j]<seq[min_index]:

min_index=j

seq[i],seq[min_index]=seq[min_index],seq[i]

return seq

def partition(seq,p,l,r):

pivot = seq[p]

seq[p],seq[r]=seq[r],seq[p]

p_pos = l

for i in range(l,r):

if seq[i]<=pivot:

seq[i],seq[p_pos]=seq[p_pos],seq[i]

p_pos=p_pos+1

seq[p_pos],seq[r]=seq[r],seq[p_pos]

return p_pos

def quick_sort(seq,left,right):

if left < right:

pivot = random.randint(left,right)

mid = partition(seq,pivot,left,right)

quick_sort(seq,left,mid-1)

quick_sort(seq,mid+1,right)

return seq

def shell_sort(seq):

incr = len(seq)/2

while(incr>=1):

for i in range(incr,len(seq)):

tmp=seq[i]

pos=i;

for j in range(i-incr,-1,-incr):

if seq[j]>tmp:

seq[j+incr]=seq[j]

pos=j

seq[pos]=tmp

incr = incr/2

return seq

def usage():

print 'Usage: python sort.py sorttype[-q|-i|-b|-s|--shell] sequence'

print 'Example: python sort.py -q 11,32,3,24,5'

def main():

try:

if(len(sys.argv)==1) or (len(sys.argv)!=3):

raise Exception()

else:

opts,args=getopt.getopt(sys.argv[1:],'qibs',['shell'])

if len(args)>0:

seq=[]

tmp=args[0].split(',')

for i in tmp:

seq.append(int(i))

else:

raise Exception()

for opt in opts:

if opt[0] =='-q':

print quick_sort(seq,0,len(seq)-1)

elif opt[0] =='-i':

print insertion_sort(seq)

elif opt[0] =='-b':

print bubble_sort(seq)

elif opt[0] =='-s':

print selection_sort(seq)

elif opt[0] =='--shell':

print shell_sort(seq)

except Exception,e:

usage()

print e

sys.exit()

if __name__ =="__main__":

main()

更多信息请查看IT技术专栏

更多信息请查看网络编程
手机网站地址:几种Python实现的排序算法
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map