C++归并排序应该怎么写?

来源:百度知道 编辑:UC知道 时间:2024/06/17 11:57:43
对动态链表排序,要用C++写啊....

Node* MergeSortLinks(Node *h, int n)
{
if(n<=1) return;
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=NUL