Ejemplo n.º 1
0
/*

=item void *sl_mergesort(void *root, int (*cmp)(void *, void *))

Return the sorted list. 

=cut

Sort a list using mergesort. The algorithm is recursive.
Thanks to CB Falconer for this code.

*/
void *sl_mergesort(void *root, int (*cmp)(void *, void *))
{
	struct sl_node *p;

	/*
	 * Must be at least two nodes in a list before it can be
	 * unordered.
	 */
	p = root;
	if (p && p->next) {
		p = sl_split(root);
		root = sl_merge(sl_mergesort(root, cmp), sl_mergesort(p, cmp), cmp);
	}

	return root;
}
Ejemplo n.º 2
0
int main(void)
{
  GGTL_MOVE *a, *b, *c, *d;

  plan_tests(4);

  a = ggtl_mc_new(NULL);
  a->fitness = 0;

  b = ggtl_mc_new(NULL);
  b->fitness = -10;

  c = ggtl_mc_new(NULL);
  c->fitness = 10;
  
  d = ggtl_mc_new(NULL);
  d->fitness = 1;

  a->next = b;
  b->next = c;
  c->next = d;

  a = sl_mergesort(a, fitness_cmp);
  b = a->next;
  c = b->next;
  d = c->next;

  ok1( a->fitness == 10 );
  ok1( b->fitness == 1 );
  ok1( c->fitness == 0 );
  ok1( d->fitness == -10 );
  
  return exit_status();
}