Exemplo n.º 1
0
static GList *
g_list_sort_real (GList    *list,
                  GFunc     compare_func,
                  gpointer  user_data)
{
  GList *l1, *l2;

  if (!list)
    return NULL;
  if (!list->next)
    return list;

  l1 = list;
  l2 = list->next;

  while ((l2 = l2->next) != NULL)
    {
      if ((l2 = l2->next) == NULL)
        break;
      l1 = l1->next;
    }
  l2 = l1->next;
  l1->next = NULL;

  return g_list_sort_merge (g_list_sort_real (list, compare_func, user_data),
                            g_list_sort_real (l2, compare_func, user_data),
                            compare_func,
                            user_data);
}
Exemplo n.º 2
0
/*将链表按照参数中设定比较方式排序*/
static GList* 
g_list_sort_real (GList    *list,
		  GFunc     compare_func,
		  gpointer  user_data)
{
  GList *l1, *l2;
  
  if (!list) 
    return NULL;
  if (!list->next) 
    return list;

  /*将链表L拆成前后两半,分别由L1与L2所指*/
  l1 = list; 
  l2 = list->next;

  while ((l2 = l2->next) != NULL)
  {
      if ((l2 = l2->next) == NULL) 
		break;
      l1 = l1->next;
  }
  l2 = l1->next; 
  l1->next = NULL; 

  /*递归的方式处理两段子链表,实现整个链表按照参数中的比较方式排序*/
  return g_list_sort_merge (g_list_sort_real (list, compare_func, user_data),
			    g_list_sort_real (l2, compare_func, user_data),
			    compare_func,
			    user_data);
}