35 lines
767 B
Python
35 lines
767 B
Python
def merge_sort(nums):
|
|
if len(nums) > 1:
|
|
mid = len(nums)//2
|
|
left = nums[:mid]
|
|
right = nums[mid:]
|
|
|
|
merge_sort(left)
|
|
merge_sort(right)
|
|
|
|
i, j, k = 0, 0, 0
|
|
while i < len(left) and j < len(right):
|
|
if left[i] < right[j]:
|
|
nums[k] = left[i]
|
|
i += 1
|
|
else:
|
|
nums[k] = right[j]
|
|
j += 1
|
|
k += 1
|
|
|
|
# finish merging remaining elements
|
|
while i < len(left):
|
|
nums[k] = left[i]
|
|
i += 1
|
|
k += 1
|
|
|
|
while j < len(right):
|
|
nums[k] = right[j]
|
|
j += 1
|
|
k += 1
|
|
return nums
|
|
|
|
|
|
nums = [5, 4, 2, 1]
|
|
res = merge_sort(nums)
|
|
print(res) |