归并排序算法实现对链表排序

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)

猜你喜欢

转载自www.cnblogs.com/chenshifang/p/12071288.html