[英]recursive merge sort in python
I am trying to make merge sort using two functions in python. 我正在尝试使用python中的两个函数进行合并排序。 But I got an error like
但是我有一个错误
IndexError: list assignment index out of range whenever run my code. IndexError:只要运行我的代码, 列表分配索引就会超出范围 。 I don't know which part is wrong.
我不知道哪一部分错了。
This is my code below. 这是我的下面的代码。 Any help will appreciate!!
任何帮助将不胜感激!
def merge(A):
def merge_sort(A,first,last):
if first<last:
mid=(first+last)//2
merge_sort(A,first, mid)
merge_sort(A,mid+1,last)
temp=[]
temp.append(99999)
i=first
j=mid+1
k=0
while i<=mid and j<=last:
if A[i]<=A[j]:
temp[k]=A[i]
k=k+1
i=i+1
else:
temp[k]=A[j]
k=k+1
j=j+1
while i<=mid:
temp[k]=A[i]
k=k+1
i=i+1
while j<=last:
temp[k]=A[j]
k=k+1
j=j+1
a=0
b=first
while a<k:
A[b]=temp[a]
b=b+1
a=a+1
merge_sort(A,0,len(A)-1)
return A
You can not assign a value to temp[k]
as long as this element does not exist. 只要此元素不存在,就不能为
temp[k]
分配值。
Delete the row temp.append(99999)
, replace every temp[k]=A[i]
by temp.append(A[i])
and every temp[k]=A[j]
by temp.append(A[j])
. 删除行
temp.append(99999)
,将每个temp[k]=A[i]
temp.append(A[i])
,将每个temp[k]=A[j]
temp.append(A[j])
。
You will end up with: 您最终将得到:
def merge(A):
def merge_sort(A,first,last):
if first<last:
mid=(first+last)//2
merge_sort(A,first, mid)
merge_sort(A,mid+1,last)
temp=[]
i=first
j=mid+1
k=0
while i<=mid and j<=last:
if A[i]<=A[j]:
temp.append(A[i])
k=k+1
i=i+1
else:
temp.append(A[j])
k=k+1
j=j+1
while i<=mid:
temp.append(A[i])
k=k+1
i=i+1
while j<=last:
temp.append(A[j])
k=k+1
j=j+1
a=0
b=first
while a<k:
A[b]=temp[a]
b=b+1
a=a+1
merge_sort(A,0,len(A)-1)
return A
A = [1,9,4,5]
print(A)
print(merge(A))
Output: 输出:
[1, 9, 4, 5]
[1, 4, 5, 9]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.