自顶向下的表归并排序的实现,使用表长来分拆表

来源:互联网 发布:java写web服务器 编辑:程序博客网 时间:2024/05/22 16:44

PLink merge(PLink a,PLink b)

{

   Link header;

   PLink c = &header;

   while (a&&b)

    {

       if (a->data < b->data)

        {

            c->next = a;

            c = a;

            a = a->next;

        }

       else

        {

            c->next = b;

            c = b;

            b = b->next;

        }

    }

    c->next = (a ==NULL)?b:a;

   return header.next;

}



PLink mergeSortLink1(PLink aHeader,int l,int r)

{

   if (r-l <= 0)

    {

       return aHeader;

    }    

   PLink a,b;

    

    a = aHeader;

    b = aHeader->next;


   int m = (r+l)/2;

   for (int i = l+1;i < m;i++)

    {

        aHeader = aHeader->next;

        b = b->next;

    }

    

    aHeader->next =NULL;

   PLink temp1 = mergeSortLink1(a,l,m);

   PLink temp2 = mergeSortLink1(b,m+1,r);

   return merge(temp1,temp2);

    

}