コード例 #1
0
ファイル: permutation.c プロジェクト: cave7/permutation
/***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");
    
}
コード例 #2
0
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);
}