class Solution:
def merge_sort(self, alist):
n = len(alist) # 计算数组的长度
if n <= 1:
return alist
mid = n // 2
left_arr = self.merge_sort(alist[:mid]) # 拆分左侧的数组
right_arr = self.merge_sort(alist[mid:]) # 拆分右侧的数组
left_point, right_point = 0, 0
result = [] # 获取最终数组
while left_point < len(left_arr) and right_point < len(right_arr):
if left_arr[left_point] < right_arr[right_point]:
result.append(left_arr[left_point])
left_point += 1
else:
result.append(right_arr[right_point])
right_point += 1
result += left_arr[left_point:]
result += right_arr[right_point:]
return result
if __name__ == '__main__':
alist = [1, 8, 6, 2, 5, 4, 8, 3, 9]
s = Solution()
res = s.merge_sort(alist)
print(res)