链表归并排序

Node *  MergeSortLinks(Node  * h,  int  n) {
  
if(n<=1return;
  
int n1,n2,i,t1=0,t2=0;
  Node 
*h1,*h2,*hh=NULL,*cur=NULL,*p;
  n1
=n/2, n2=n-n1;
  p
=h;
  
for(i=0;i<n1;i++) p=p->next;
  h1
=MergeSortLinks(h,n1);
  h2
=MergeSortLinks(p,n2);
  
while(t1<n1 || t2<n2){
    
if(t1<n1 && t2<n2)
      
if(h1->key < h2->key) p=h1, h1=h1->next,t1++;
      
else p=h2, h2=h2->next,t2++;
    
else 
      
if(t1<n1) p=h1, h1=h1->next,t1++;
      
else p=h2, h2=h2->next,t2++;
    
if(NULL==hh) hh=cur=p;
    
else cur->next=p, cur=cur->next;
  }

  h1
=h2=p=cur=NULL;
  
return hh;
}


Node
*  Sort(Node  *  head) {
  Node 
*p;
  
int n=0,i;
  p
=head;
  
while(p){
    n
++; p=p->next;
  }

  head
=MergeSortLinks(head,n);
  p
=head;
  
for(i=0;i<n-1;i++)
    p
=p->next;
  p
->next=NULL;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值