python 链表的归并排序(附数组的归并排序作为对照)

来源:互联网 发布:dbc2000怪物数据库 编辑:程序博客网 时间:2024/05/20 07:59

1. 链表的归并排序:

class Solution(object):    def merge(self, left, right):        head = tail = ListNode(-1)        while left and right:            if left.val<right.val:                tail.next = left                left = left.next                tail = tail.next            else:                tail.next = right                right = right.next                tail = tail.next        tail.next = left if left else right        return head.next            def sortList(self, head):        if not head or not head.next:            return head        slow = head        fast = head        while fast and fast.next:   #此处使用快慢指针的方法找到链表的中点            p = slow                #p 在这里作为截断点            slow = slow.next            fast = fast.next.next                left = head        right = p.next        p.next = None        left = self.sortList(left)        right = self.sortList(right)        return self.merge(left,right)


2. 数组的归并排序:

class Soluton1(object):    def merge(self,left,right):        head = []        while left and right:            if left[0]<right[0]:                head.append(left.pop(0))            else:                head.append(right.pop(0))        if left:            for i in left:                head.append(i)        else:            for i in right:                head.append(i)        return head        def sortArr(self,head):        if len(head)<=1:            return head        mid = len(head)/2        left = head[:mid]        right = head[mid:]                left = self.sortArr(left)        right = self.sortArr(right)        return self.merge(left,right)



0 0