def insertion_sort(A):
n=len(A);
#A[0,i) is sorted A[i,n) is unsorted
#insert A[i] into A[0,i)
for i in range(1,n):
x=A[i]
j=i-1
while j>=0 and A[j]>x:
A[j+1]=A[j]
j-=1
A[j+1]=x
def insertion_sort_r(A,n):
if n<=1:
return
else:
insertion_sort_r(A,n-1)
x=A[n-1]
j=n-2;
while(j>=0 and A[j]>x):
A[j+1]=A[j]
j-=1
A[j+1]=x
def merge_sort(A,p,r):
##双闭区间
##双闭区间的证明
if p<r:
q=(p+r)//2
merge_sort(A,p,q)
merge_sort(A,q+1,r)
merge2(A,p,q,r)
def merge(A,p,q,r):
n1=q-p+1
n2=r-q
L=[0]*(n1+1)
R=[0]*(n2+1)
for i in range(0,n1):
L[i]=A[p+i]
for i in range(0,n2):
R[i]=A[q+1+i]
L[n1]=R[n2]=100000
i,j=0,0
for k in range(p,r+1):
if L[i]<=R[j]:
A[k]=L[i]
i+=1
else:
A[k]=R[j]
j+=1
def merge2(A,p,q,r):
n1=q-p+1
n2=r-q
L=[0]*n1
R=[0]*n2
for i in range(0,n1):
L[i]=A[p+i]
for j in range(0,n2):
R[j]=A[q+1+j]
i,j,k=0,0,p;
while(i<n1 and j<n2):
if L[i]<=R[j]:
A[k]=L[i]
i+=1;k+=1
else:
A[k]=R[j]
j+=1;k+=1
if i<n1:
A[k:r+1]=L[i:]
else:
A[k:r+1]=R[j:]
A=[4,3,2,1]
insertion_sort_r(A,len(A))
print(A)
算法导论题解-python语言实现-第二章
最新推荐文章于 2023-02-20 17:35:54 发布