/***non recursive permutation module***/ int permutation_non_recursive(const char* s){ /*wrapper*/ int len=strlen(s); char* tmp=(char *)malloc((len+1)*sizeof(char)); if(!tmp) return -1; int* address=(int *)malloc(len*sizeof(int)); if(!address) return -1; strcpy(tmp,s); permutation_init(s,address,len); /*permutate all possibilities*/ while (permutation_next(s,address,tmp,len)!=-1) { continue; } free(tmp); free(address); printf("\n"); }
int main_insertion_sort(int argc, char** argv) { bool ok = true; /* Load forums from file into list. */ list_t *list_p = NULL; if (ok) ok = (list_p = list_init()) != NULL; if (ok) { printf("-> Loading forum.csv...\n"); ok = load_file("forum" ".csv", list_p); } unsigned int i, size; size = list_size(list_p); printf("Forums: %d\n", size); /* Create permutation of forum ids. */ permutation_t *perm_p = NULL; perm_p = permutation_init(size); if (perm_p == NULL) return (EXIT_FAILURE); unsigned int *forum_ids = malloc(size * (sizeof (unsigned int))); if (forum_ids == NULL) return (EXIT_FAILURE); for (i = 0; i < size; i++) { forum_t *f_p; list_get(list_p, (void **) &f_p, i); // forum_ids[i] = forum_get_id(f_p); forum_ids[permutation_at(perm_p, i)] = forum_get_id(f_p); } permutation_destroy(&perm_p); /* Print all shuffled forum ids. */ // for (i = 0; i < size; i++) // printf("%u\n", forum_ids[i]); /* Timing variables. */ double t1, t2, real_time; struct tms tb; double tickspersec = (double) sysconf(_SC_CLK_TCK); t1 = (double) times(&tb); /* Sort forum ids using insertion sort. */ insertion_sort(forum_ids, size, sizeof (unsigned int), forum_id_cmp); t2 = (double) times(&tb); /* Print sorted forum ids. */ for (i = 0; i < size; i++) printf("%u\n", forum_ids[i]); real_time = (double) (t2 - t1) / tickspersec; printf("Completed insertion sort in %.3f sec\n", real_time); /* Free allocated memory. */ for (i = 0; i < size; i++) { forum_t *f_p; list_get(list_p, (void **) &f_p, i); forum_destroy(&f_p); } list_destroy(&list_p); free(forum_ids); return (EXIT_SUCCESS); }