单链表的快速排序和归并排序

快速排序

# -*- coding: UTF-8 -*-

class TreeNode(object):
    def __init__(self,val,nex):
        self.val=val
        self.next=nex
def linksort(s,e):
    if s==e:
        return 
    
    key=s.val
    p=s
    q=s.next
    while q!=e:
        if q.val<key:
			p=p.next
			p.val,q.val=q.val,p.val
        q=q.next
		
    p.val,s.val=s.val,p.val
    linksort(s,p)
    linksort(p.next,e)
    
node5=TreeNode(4,None)
node4=TreeNode(6,node5)
node3=TreeNode(2,node4)
node2=TreeNode(3,node3)
node1=TreeNode(7,node2)
head=TreeNode(5,node1)

linksort(head,None)

p=head
while p:
    print p.val
    p=p.next

归并排序

# -*- coding: UTF-8 -*-

class TreeNode(object):
    def __init__(self,val,nex):
        self.val=val
        self.next=nex
def mergesort(head):
	if not head or not head.next:
		return head
	
	s=head
	f=head.next
	while f and f.next:
		s=s.next
		f=f.next.next
	
	t=s.next
	s.next=None
	l=mergesort(head)
	r=mergesort(t)
	dummy=TreeNode(0,None)
	pre=dummy
	while l and r:
		if l.val<r.val:
			pre.next=l
			pre=l
			l=l.next
		else:
			pre.next=r
			pre=r
			r=r.next
	if not l:
		pre.next=r
	if not r:
		pre.next=l
	return dummy.next
		
    
node5=TreeNode(4,None)
node4=TreeNode(6,node5)
node3=TreeNode(2,node4)
node2=TreeNode(3,node3)
node1=TreeNode(7,node2)
head=TreeNode(5,node1)

head=mergesort(head)

p=head
while p:
    print p.val
    p=p.next

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值