int main() { int p, q, i, id[N], p_id, q_id, size_arr[N]; // initialize ids and size for (i = 0; i < N; i++) { id[i] = i; size_arr[i] = 1; } // read pairs and keep/update connected components information printf("Enter pairs p q: \n"); while (scanf("%d %d", &p, &q) == 2) { p_id = find(p, id); q_id = find(q, id); if (p_id == q_id) { printf(" %d and %d were on the same set\n", p, q); print_array_int(id, N); continue; } set_union(p_id, q_id, id, N, size_arr,p,q); // sending two extra values.. printf(" %d %d link led to set union\n", p, q); print_array_int(id, N); print_array_int(size_arr, N); } return 0; }
void dump_sparsity ( op_sparsity const * sparsity, char const * filename ) { FILE *f = fopen(filename, "w"); fprintf(f,"%zu %zu %zu\n\n", sparsity->nrows, sparsity->ncols, sparsity->max_nonzeros); print_array_int(f, sparsity->nnz, sparsity->nrows); print_array_int(f, sparsity->rowptr, sparsity->nrows + 1); print_array_int(f, sparsity->colidx, sparsity->rowptr[sparsity->nrows]); fclose(f); }
int main(void) { int ex1[] = { 1, 43, 23, 55 }; int ex2[] = { 12, 33, 1, 19, 44, 11, 76, 27, 13 }; enum { NUM_EX1 = sizeof(ex1) / sizeof(ex1[0]) }; enum { NUM_EX2 = sizeof(ex2) / sizeof(ex2[0]) }; int ex3[max(DIM(ex1), DIM(ex2))]; size_t num3; memmove(ex3, ex1, sizeof(ex1)); num3 = NUM_EX1; print_array_int("Example 1 qsort - before", num3, ex3); qsort(ex3, num3, sizeof(ex3[0]), cmp_numbers); print_array_int("Example 1 qsort - after", num3, ex3); memmove(ex3, ex2, sizeof(ex2)); num3 = NUM_EX2; print_array_int("Example 2 qsort - before", num3, ex3); qsort(ex3, num3, sizeof(ex3[0]), cmp_numbers); print_array_int("Example 2 qsort - after", num3, ex3); memmove(ex3, ex1, sizeof(ex1)); num3 = NUM_EX1; print_array_int("Example 1 stable partition - before", num3, ex3); merge_sort(ex3, num3, sizeof(ex3[0]), cmp_numbers); print_array_int("Example 1 stable partition - after", num3, ex3); memmove(ex3, ex2, sizeof(ex2)); num3 = NUM_EX2; print_array_int("Example 2 stable partition - before", num3, ex3); merge_sort(ex3, num3, sizeof(ex3[0]), cmp_numbers); print_array_int("Example 2 stable partition - after", num3, ex3); return 0; }
void counting_sort(int *faltas, char **alunos, int n, int k){ int *count = (int *)malloc(k*sizeof(int)); int *first_idx = (int *)malloc(k*sizeof(int)); int *out_idx = (int *)malloc(n*sizeof(int)); int i, total; for(i = 0; i < k; ++i){ count[i] = 0; } printf("count = "); print_array_int(count, k); for(i = 0; i < n; ++i){ ++count[faltas[i]]; } printf("count = "); print_array_int(count, k); total = 0; for(i = 0; i < k; ++i){ first_idx[i] = total; total += count[i]; } printf("first_idx = "); print_array_int(first_idx, k); for(i = 0; i < n; ++i){ out_idx[first_idx[faltas[i]]] = i; first_idx[faltas[i]] = first_idx[faltas[i]] + 1; } printf("out_idx = "); print_array_int(out_idx, n); for(i = 0; i < n; ++i){ printf("{%d, %s} ", faltas[out_idx[i]], alunos[out_idx[i]]); } printf("\n"); free(count); free(first_idx); free(out_idx); }
void simple_counting_sort(int *faltas, char **alunos, int n, int k){ int *count = (int *)malloc(k*sizeof(int)); int i, j; for(i = 0; i < k; ++i){ count[i] = 0; } printf("count = "); print_array_int(count, k); for(i = 0; i < n; ++i){ ++count[faltas[i]]; } printf("count = "); print_array_int(count, k); for(i = 0; i < k; ++i){ for(j = 0; j < count[i]; ++j){ printf("{%d, -} ", i); } } printf("\n"); free(count); }
static void print_array(void *arr, int size, int start_at, int end_at, char delim, uint8_t type) { int *arr_int; char *arr_char; switch(type) { case INT: arr_int = arr; print_array_int(arr_int, size, start_at, end_at, delim); break; case CHAR: arr_char = arr; break; default: fprintf(stderr, "Array type not recognized\n"); return; } return; }
void dump_map ( op_map const * map, char const * filename ) { FILE *f = fopen(filename, "w"); fprintf(f,"%s %d\n\n", map->name, map->dim); print_array_int(f, map->map, map->from->size * map->dim); fclose(f); }