python 中的合并排序 - 对象 NoneType 错误
mergeSort in python - object NoneType error
我正在尝试在 python 中实现一个简单的合并排序,目的是将函数拆分为 mergeSort 并合并。我的代码如下所示:
def merge_sort(s):
if len(s) <= 1:
return s
else:
m = len(s) // 2
s1 = merge_sort(s[:m])
s2 = merge_sort(s[m:])
print(merge(s1, s2))
return merge(s1, s2)
def merge(s1, s2):
i=0
j=0
k=0
while i < len(s1) and j< len(s2):
if s1[i] < s2[j]:
s[k] = s1[i]
i += 1
else:
s[k] = s2[j]
j += 1
k += 1
while i < len(s1):
s[k] = s1[i]
i += 1
k += 1
while j < len(s2):
s[k] = s2[j]
j += 1
k += 1
现在我确实相信我理解了归并排序的基本思想,但是当我测试我的代码时
我收到错误:
TypeError: object of type 'NoneType' has no len()
2 小时后,我放弃并构建了不同的代码并且它有效,但它仍然困扰着我,因为我相信上面的代码是正确的,我只是遗漏了一些细节。
如果有人能向我解释,我将不胜感激。
谢谢!
def merge_sort(s):
if len(s) <= 1:
return s
else:
m = len(s) // 2
s1 = merge_sort(s[:m])
s2 = merge_sort(s[m:])
print(merge(s1, s2))
return merge(s1, s2)
def merge(s1, s2):
s = []
i=0
j=0
while i < len(s1) and j< len(s2):
if s1[i] < s2[j]:
s.append(s1[i])
i += 1
else:
s.append(s2[j])
j += 1
while i < len(s1):
s.append(s1[i])
i += 1
while j < len(s2):
s.append(s2[j])
j += 1
return s
我正在尝试在 python 中实现一个简单的合并排序,目的是将函数拆分为 mergeSort 并合并。我的代码如下所示:
def merge_sort(s):
if len(s) <= 1:
return s
else:
m = len(s) // 2
s1 = merge_sort(s[:m])
s2 = merge_sort(s[m:])
print(merge(s1, s2))
return merge(s1, s2)
def merge(s1, s2):
i=0
j=0
k=0
while i < len(s1) and j< len(s2):
if s1[i] < s2[j]:
s[k] = s1[i]
i += 1
else:
s[k] = s2[j]
j += 1
k += 1
while i < len(s1):
s[k] = s1[i]
i += 1
k += 1
while j < len(s2):
s[k] = s2[j]
j += 1
k += 1
现在我确实相信我理解了归并排序的基本思想,但是当我测试我的代码时
我收到错误:
TypeError: object of type 'NoneType' has no len()
2 小时后,我放弃并构建了不同的代码并且它有效,但它仍然困扰着我,因为我相信上面的代码是正确的,我只是遗漏了一些细节。 如果有人能向我解释,我将不胜感激。 谢谢!
def merge_sort(s):
if len(s) <= 1:
return s
else:
m = len(s) // 2
s1 = merge_sort(s[:m])
s2 = merge_sort(s[m:])
print(merge(s1, s2))
return merge(s1, s2)
def merge(s1, s2):
s = []
i=0
j=0
while i < len(s1) and j< len(s2):
if s1[i] < s2[j]:
s.append(s1[i])
i += 1
else:
s.append(s2[j])
j += 1
while i < len(s1):
s.append(s1[i])
i += 1
while j < len(s2):
s.append(s2[j])
j += 1
return s