归并排序
def Merge(left, right):
temp = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
temp.append(left[i])
i += 1
else:
temp.append(right[j])
j += 1
while i < len(left):
temp.append(left[i])
i += 1
while j < len(right):
temp.append(right[j])
j += 1
return temp
def MergeSort(nums):
if len(nums) < 2:
return nums
mid = len(nums)//2
left = MergeSort(nums[:mid])
right = MergeSort(nums[mid:])
return Merge(left, right)
if __name__ == '__main__':
input_nums = [6, 4, 8, 9, 2, 3, 1]
print('排序之前:', input_nums)
input_nums = MergeSort(input_nums)
print('排序之后:', input_nums)
时间复杂度:O(nlogn)
空间复杂度:O(n)
优化空间:
def Merge(left, right, s):
i, j, k = 0, 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
s[k] = left[i]
i += 1
k += 1
else:
s[k] = right[j]
j += 1
k += 1
while i < len(left):
s[k] = left[i]
i += 1
k += 1
while j < len(right):
s[k] = right[j]
j += 1
k += 1
def MergeSort(nums):
if len(nums) < 2:
return nums
mid = len(nums)//2
left = nums[:mid]
right = nums[mid:]
MergeSort(left)
MergeSort(right)
Merge(left, right, nums)
if __name__ == '__main__':
input_nums = [6, 4, 8, 9, 2, 3, 1]
print('排序之前:', input_nums)
MergeSort(input_nums)
print('排序之后:', input_nums)

本文介绍了使用Python编程语言实现归并排序的方法,详细解析了算法的时间复杂度为O(nlogn)以及空间复杂度为O(n),同时探讨了优化空间的可能性。

被折叠的 条评论
为什么被折叠?



