23 int (*compar)(
const void *,
const void *)) {
26 void * tmp = malloc(size);
28 for( ; i < nmemb; i++ ) {
31 memcpy( tmp, base + i * size, size );
35 while( j >= 0 && compar( tmp, base + j * size) < 0 ) {
37 memcpy( base + (j + 1) * size, base + j * size, size );
42 memcpy( base + (j + 1) * size, tmp, size );
55 int (*compar)(
const void *,
const void *)) {
58 void * tmp = malloc(size);
60 for( ; i < nmemb; i++ ) {
63 memcpy( tmp, base + i * size, size );
67 while( j >= 0 && compar( tmp, base + j * size) <= 0 ) {
69 memcpy( base + (j + 1) * size, base + j * size, size );
74 memcpy( base + (j + 1) * size, tmp, size );
102 Nodeptr node_i = * entry_ptr_i;
103 Nodeptr node_j = * entry_ptr_j;
106 if( node_i_degree > node_j_degree )
return 1;
107 else if( node_i_degree < node_j_degree )
return -1;
118 Edgeptr edge_i = * entry_ptr_i;
119 Edgeptr edge_j = * entry_ptr_j;
133 Edgeptr edge_i = * entry_ptr_i;
134 Edgeptr edge_j = * entry_ptr_j;
163 printf(
"before layerSort: ");
172 printf(
"after layerSort: ");
static int compare_down_edges(const void *ptr_i, const void *ptr_j)
static int compare_up_edges(const void *ptr_i, const void *ptr_j)
Interface for functions that perform various sorts. All sorts are stable.
static bool unstable_insertion_sort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *))
void updateAllPositions(void)
static bool insertion_sort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *))
void sortByDegree(Nodeptr *node_array, int num_nodes)
void layerUnstableSort(int layer)
Definition of data structures and access functions for a layered graph.
void sortByUpNodePosition(Edgeptr *edge_array, int num_edges)
void layerSort(int layer)
static int compare_degrees(const void *ptr_i, const void *ptr_j)
void sortByDownNodePosition(Edgeptr *edge_array, int num_edges)
static int compare_weights(const void *ptr_i, const void *ptr_j)
void layerQuicksort(int layer)
void updateNodePositions(int layer)