最近在重温算法的过程中,对递归排序又重新学习了一次,感觉自己真是基础不够。
归并排序复杂度:
时间复杂度:O(nlogn)算法中最好,最坏和平均的时间性能
空间复杂度:O(n)
比较操作次数介于(nlogn)/2和nlogn-n+1
占用内存,效率高且稳定
我自己的实现方法:
python实现
def MergeSort(a,b):
c=[]
i=0
j=0
while i<len(a) and j<len(b):
if(a[i]<b[j]):
c.append(a[i])
i=i+1
else:
c.append(b[j])
j=j+1
if(i+1==len(a)):
while(j<len(b)):
c.append(b[j])
j=j+1
else:
while(i<len(a)):
c.append(a[i])
i=i+1
return c
参数分别是2个数组,但是这样做导致难以递归,而且排序的收尾做的不是很好
def MergeNice(A,q,p,r):
n1=p-q+1
n2=r-p+1
wil=0
wil2=1
L=[]
R=[]
while(wil<n1):
L.append(A[q+wil])
wil=wil+1
while(wil2<n2):
R.append(A[p+wil2])
wil2=wil2+1
L.append(65536)
R.append(65536)
i=0
j=0
k=q
while(k<r+1):
if(L[i]<R[j]):
A.append(L[i])
i=i+1
else:
A.append(R[j])
j=j+1
k=k+1
def Mergessort(A,p,r):
if(p<r):
q=(int)((r+p)/2)
Mergessort(A,p,q)
Mergessort(A,q+1,r)
MergeNice(A,p,q,r)
test3=[1,3,5,7,2,4,6,8]
test4=Mergessort(test3,0,7)
for ii in test3:
print(ii)
这样就实现了通过分治,递归,从而完成排序