我在执行归并排序时出错了吗?
Mistake in my implementation of merge sort?
这是我对归并排序的实现
lis=list()
lis=[9,0,5,1,8,3,7,2,6,4]
def merge(lis,l,m,r):
i=l
j=m
n1=m-1-l
n2=r-m
temp=list()
while(i<=n1 and j<=n2):
if(lis[i]<lis[j]):
temp.append(lis[i])
i+=1
else:
temp.append(lis[j])
j+=1
while(i<=n1):
temp.append(lis[i])
i+=1
while(j<=n2):
temp.append(lis[j])
j+=1
for k in range(len(temp)):
lis[l+k]=temp[k]
def mergesort(lis,l,r):
if(l<r):
m=(l+r)//2
mergesort(lis,l,m)
mergesort(lis,m+1,r)
merge(lis,l,m,r)
mergesort(lis,0,9)
print(lis)
这是输出:[0, 5, 8, 3, 9, 1, 7, 2, 6, 4]
确实对一些递归进行了排序,但 hen bonks to death
数学使用有问题请帮忙
无法弄清楚我的代码有什么问题
这里是固定整洁的版本-
def merge(lis, l, m, r):
n1 = m - l + 1
n2 = r- m
L = [0] * (n1)
R = [0] * (n2)
for i in range(0 , n1):
L[i] = lis[l + i]
for j in range(0 , n2):
R[j] = lis[m + 1 + j]
i,j,k=0,0,l
while i < n1 and j < n2 :
if L[i] <= R[j]:
lis[k] = L[i]
i += 1
else:
lis[k] = R[j]
j += 1
k += 1
while i < n1:
lis[k] = L[i]
i += 1
k += 1
while j < n2:
lis[k] = R[j]
j += 1
k += 1
def mergesort(lis,l,r):
if l < r:
m = (l+(r-1))//2
mergesort(lis, l, m)
mergesort(lis, m+1, r)
merge(lis, l, m, r)
lis=[9,0,5,1,8,3,7,2,6,4]
mergesort(lis,0,len(lis)-1)
print(lis)
这是你犯的最严重的错误。
m=(l+r)//2
应该是 m=(l+r)//2
做到了
'''
n=int(input("Enter number of elements: "))
lis=list()
for i in range(n):
lis.append(int(input("Enter element "+str(i+1)+": ")))
'''
lis=list()
lis=[9,0,5,1,8,3,7,2,6,4]
def merge(lis, l,m,r):
i,j=l,m+1
n1,n2=m,r
srt=list()
while(i<=n1 and j<=n2):
if(lis[i]<lis[j]):
srt.append(lis[i])
i+=1
else:
srt.append(lis[j])
j+=1
while (i<=n1):
srt.append(lis[i])
i+=1
while (j<=n1):
srt.append(lis[j])
j+=1
m=l
for k in srt:
lis[m]=k
m+=1
def mergesort(lis,l,r):
if(l<r):
m=(l+r)//2
mergesort(lis,l,m)
mergesort(lis,m+1,r)
merge(lis,l,m,r)
mergesort(lis,0,9)
print(lis)
这是我对归并排序的实现
lis=list()
lis=[9,0,5,1,8,3,7,2,6,4]
def merge(lis,l,m,r):
i=l
j=m
n1=m-1-l
n2=r-m
temp=list()
while(i<=n1 and j<=n2):
if(lis[i]<lis[j]):
temp.append(lis[i])
i+=1
else:
temp.append(lis[j])
j+=1
while(i<=n1):
temp.append(lis[i])
i+=1
while(j<=n2):
temp.append(lis[j])
j+=1
for k in range(len(temp)):
lis[l+k]=temp[k]
def mergesort(lis,l,r):
if(l<r):
m=(l+r)//2
mergesort(lis,l,m)
mergesort(lis,m+1,r)
merge(lis,l,m,r)
mergesort(lis,0,9)
print(lis)
这是输出:[0, 5, 8, 3, 9, 1, 7, 2, 6, 4] 确实对一些递归进行了排序,但 hen bonks to death 数学使用有问题请帮忙
无法弄清楚我的代码有什么问题
这里是固定整洁的版本-
def merge(lis, l, m, r):
n1 = m - l + 1
n2 = r- m
L = [0] * (n1)
R = [0] * (n2)
for i in range(0 , n1):
L[i] = lis[l + i]
for j in range(0 , n2):
R[j] = lis[m + 1 + j]
i,j,k=0,0,l
while i < n1 and j < n2 :
if L[i] <= R[j]:
lis[k] = L[i]
i += 1
else:
lis[k] = R[j]
j += 1
k += 1
while i < n1:
lis[k] = L[i]
i += 1
k += 1
while j < n2:
lis[k] = R[j]
j += 1
k += 1
def mergesort(lis,l,r):
if l < r:
m = (l+(r-1))//2
mergesort(lis, l, m)
mergesort(lis, m+1, r)
merge(lis, l, m, r)
lis=[9,0,5,1,8,3,7,2,6,4]
mergesort(lis,0,len(lis)-1)
print(lis)
这是你犯的最严重的错误。
m=(l+r)//2
应该是 m=(l+r)//2
做到了
'''
n=int(input("Enter number of elements: "))
lis=list()
for i in range(n):
lis.append(int(input("Enter element "+str(i+1)+": ")))
'''
lis=list()
lis=[9,0,5,1,8,3,7,2,6,4]
def merge(lis, l,m,r):
i,j=l,m+1
n1,n2=m,r
srt=list()
while(i<=n1 and j<=n2):
if(lis[i]<lis[j]):
srt.append(lis[i])
i+=1
else:
srt.append(lis[j])
j+=1
while (i<=n1):
srt.append(lis[i])
i+=1
while (j<=n1):
srt.append(lis[j])
j+=1
m=l
for k in srt:
lis[m]=k
m+=1
def mergesort(lis,l,r):
if(l<r):
m=(l+r)//2
mergesort(lis,l,m)
mergesort(lis,m+1,r)
merge(lis,l,m,r)
mergesort(lis,0,9)
print(lis)