我试图在Python中实现合并排序,根据您提供的参数,按升序或降序排序。我使用了2个独立的函数,但我无法在一个函数中使用它。
def mergeSort(L, ascending = True):
print('Mergesort, Parameter L:')
print(L)
result = []
if len(L) == 1:
return L
mid = len(L) // 2
teilliste1 = mergeSort(L[:mid], ascending)
teilliste2 = mergeSort(L[mid:], ascending)
x, y = 0, 0
while x < len(teilliste1) and y < len(teilliste2):
if ascending:
if teilliste1[x] > teilliste2[y]:
result.append(teilliste2[y])
y = y + 1
else:
result.append(teilliste1[x])
x = x + 1
else:
if teilliste1[x] < teilliste2[y]:
result.append(teilliste2[y])
y = y + 1
else:
result.append(teilliste1[x])
x = x + 1
result = result + teilliste1[x:]
result = result + teilliste2[y:]
return result
mergeSort(list, True) # sort in ascending order
mergeSort(list, False) # sort in descending order
只需翻转&gt;在if语句中会使它降序但如果我尝试在一个函数中同时执行,它总是会弄乱我的结果。有什么建议吗?
答案 0 :(得分:0)
def mergeSort(L, ascending = True):
result = []
if len(L) == 1:
return L
mid = len(L) // 2
teilliste1 = mergeSort(L[:mid])
teilliste2 = mergeSort(L[mid:])
x, y = 0, 0
while x < len(teilliste1) and y < len(teilliste2):
if teilliste1[x] > teilliste2[y]: # < for descending
result.append(teilliste2[y])
y = y + 1
else:
result.append(teilliste1[x])
x = x + 1
result = result + teilliste1[x:]
result = result + teilliste2[y:]
if ascending == True :
return result
else:
result.reverse()
return result
list=[3,2,4,1,5,9,7,6]
print(list)
print(mergeSort(list, True) )# sort in ascending order