1、有序顺序表的归并排序,假设a[0] <= a[1] <= ... <= a[n-1]
void merge_list( int a[], int m, int b[], int n, int ** c )
{
int i = 0, j = 0;
int *pa = a, *pb = b, *pc = NULL, *qa = a + m - 1, *qb = b + n - 1;
if( *c != NULL )
free( *c );
*c = ( int * )malloc( sizeof( int ) * ( m + n ) );
assert( *c != NULL );
pc = *c;
while( pa <= qa && pb <= pb )
*pc++ = ( *pa <= *pb ) ? *pa++ : *pb++;
while( pa <= qa )
*pc++ = *pa++;
while( pb <= qb )
*pc++ = *pb++;
}
2、有序单链表的归并排序,假设a[0] <= a[1] <= ... <= a[n-1]
typedef int elem_type;
struct node;
typedef struct node node;
typedef node * node_ptr;
typedef node * link_list;
struct node
{
elem_type data;
node_ptr next;
};
void merge_list( link_list * lst_a, link_list * lst_b, link_list * lst_c )
{
node_ptr pa = (*lst_a)->next, pb = (*lst_b)->next, pc;
*lst_c = pc = *lst_a;
while( pa != NULL && pb != NULL )
{
if( pa->data <= pb->data )
{
pc->next = pa; pc = pa; pa = pa->next;
}
else
{
pc->next = pb; pc = pb; pb = pb->next;
}
}
pc->next = ( pa == NULL ) ? pb : pa;
free( *lst_b );
}