Ejemplo n.º 1
0
List_PersonPtr_Iterator node_sort(List_PersonPtr *list, List_PersonPtr_Iterator begin, List_PersonPtr_Iterator end)
{
  List_PersonPtr_Iterator res1;
  List_PersonPtr_Iterator res2;

  if(begin.node == end.node)
  {
    begin.node->next = NULL;
    return begin;
  }
  else
  {
    List_PersonPtr_Iterator slow = begin;
    List_PersonPtr_Iterator fast = begin;
    fast.inc(&fast);
    while(!List_PersonPtr_Iterator_equal(fast,end))
    {
      fast.inc(&fast);
      if(!List_PersonPtr_Iterator_equal(fast,end))
      {
        fast.inc(&fast);
        slow.inc(&slow);
      }
    }
    List_PersonPtr_Iterator slow_next = slow;
    slow_next.inc(&slow_next);
    slow.node->next = NULL;
    res1 = node_sort(list, begin, slow);
    res2 = node_sort(list, slow_next, end);
  }
  return SortedMerge(list, res1, res2);
}
Ejemplo n.º 2
0
void sort(List_PersonPtr* list)
{
  List_PersonPtr_Iterator end = list->end(list);
  end.dec(&end);
  List_PersonPtr_Iterator head = node_sort(list, list->begin(list), end);
  list->head.next = head.node;
  reinsertPrevPointers(list);
}
Ejemplo n.º 3
0
static void fini_galaxy_prep(struct galaxy *g)
{
    g->N_num = node_sort(g->N, 0, 1, g->S, 0, g->S_num, 0);
}