排序算法python实现
Posted 涨涨涨123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法python实现相关的知识,希望对你有一定的参考价值。
参考java版的算法书,使用python重写了一遍。初学,自己写的,代码比较粗糙,意思明白就好。
1 import numpy as np 2 import random 3 ####验证排序算法是否正确 4 a=[x for x in range(35)] 5 random.shuffle(a) 6 print(a) 7 rank(a) ###rank为主函数 8 print(a)
接下来是不同算法实现
1 def exch(a,i,j): 2 t=a[j] 3 a[j]=a[i] 4 a[i]=t 5 ####冒泡 6 def rank(a): 7 for i in range(len(a)-1): 8 for j in range(i+1,len(a)): 9 if a[i]>a[j]: 10 exch(a,i,j) 11 return a 12 #####选择排序 13 def rank(a): 14 for i in range(len(a)-1): 15 flag=i 16 for j in range(i+1,len(a)): 17 if a[flag]>a[j]: 18 flag=j 19 if flag!=i: 20 exch(a,i,flag) 21 return a 22 ###########插入排序 23 def rank(a): 24 for i in range(1,len(a)): 25 j=i 26 while j>0 and a[j]<a[j-1]: 27 exch(a,j,j-1) 28 j-=1 29 return a 30 31 #######归并排序 32 def rank(a): 33 rankhelper(a,0,len(a)-1) 34 def rankhelper(a,lo,hi): 35 if hi<=lo: 36 return 37 mid=int((hi-lo)/2+lo) 38 rankhelper(a,lo,mid) 39 rankhelper(a, mid + 1,hi) 40 merg(a,lo,mid,hi) 41 def merg(a,lo,mid,hi): 42 43 i=lo 44 j=mid+1 45 result=np.ones(len(a),dtype=int) ####建空数组会降低排序效率,待改进 46 result[lo:hi+1]=a[lo:hi+1] 47 48 for k in range(lo,hi+1): 49 if i>mid: 50 a[k]=result[j] 51 j+=1 52 elif j>hi: 53 a[k]=result[i] 54 i+=1 55 elif result[i]<result[j]: 56 a[k]=result[i] 57 i+=1 58 else: 59 a[k]=result[j] 60 j+=1 61 62 ####快排 63 def rank(a): 64 random.shuffle(a) 65 rankhelper(a,0,len(a)-1) 66 def rankhelper(a,lo,hi): 67 if lo>=hi: 68 return 69 j=partition(a,lo,hi) 70 rankhelper(a,lo,j-1) 71 rankhelper(a,j+1,hi) 72 def partition(a,lo,hi): 73 l1=lo+1 74 l2=hi 75 while True: 76 while a[l1]<a[lo]: 77 if l1==hi: 78 break 79 l1+=1 80 while a[l2]>a[lo]: 81 if l2==lo: 82 break 83 l2-=1 84 if l1>=l2: 85 break 86 exch(a,l1,l2) 87 exch(a,lo,l2) 88 return l2 89 90 #############堆排序 95 def sink(a,k,l): #####最小堆 96 while 2*k+1<=l: 97 j=2*k+1 98 if j<l and a[j]>a[j+1]: 99 j=j+1 100 if a[j]>a[k]: 101 break 102 exch(a,j,k) 103 k=j 104 def sink1(a,k,l): ###最大堆 105 while 2*k+1<=l: 106 j=2*k+1 107 if j<l and a[j]<a[j+1]: 108 j+=1 109 if a[j]<a[k]: 110 break 111 exch(a,j,k) 112 k=j 113 def rank(a): 114 l=len(a)-1 115 t=int(l/2)+1 116 while t>=0: 117 sink(a,t,l) 118 t-=1 119 while l>0: 120 exch(a,l,0) 121 l-=1 122 sink(a,0,l)
以上是关于排序算法python实现的主要内容,如果未能解决你的问题,请参考以下文章