]> git.llucax.com Git - z.facultad/75.06/jacu.git/commitdiff
BUGFIX : Se sacan cosasq ue no se necesitan mas y se arregla la funcion de comparacion
authorRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 20 Jun 2004 19:10:50 +0000 (19:10 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 20 Jun 2004 19:10:50 +0000 (19:10 +0000)
 para que el qsort ordene bien.

otros/blocksorting/bs.c
otros/blocksorting/bs.h
otros/blocksorting/main.c

index b7caa543106a13e3088c3b787aec23be9ffb51fe..21e1ff664e6b18fb6ce39e890a24c775e4b74c6b 100644 (file)
@@ -36,10 +36,11 @@ char es_menor(char *data, t_BlockSort *bs, int i, int j)
                pi = (i+k)%bs->len;
                pj = (j+k)%bs->len;
 
-               if (data[pi] > data[pj]) return 0;
-               if (data[pi] < data[pj]) return 1;
+               if (data[pi] > data[pj]) return 1; /* El primero es mayor */
+               if (data[pi] < data[pj]) return -1; /* El primero es menor */
        }
 
+       /* Son iguales! */
        return 0;
 }
 
@@ -49,30 +50,23 @@ void generar_array(char *data, t_BlockSort *bs)
        for(i=0; i<bs->len; i++) {
                bs->array[i].pos_inicial = i;
                bs->array[i].pos_final = (i+bs->len-1)%bs->len;
-               bs->array[i].pos_orden = 0;
-               bs->array[i].ord = (i==1)?1:0;
+               bs->array[i].ord = (i==0)?1:0;
                bs->array[i].bs = bs;
        }
 }
 
 void ordenar_array(char *data, t_BlockSort *bs)
 {
-       /*unsigned long int i, j, min;*/
-
-/*     for(i=0; i<bs->len; i++) {
-               min = -1;
-               for(j=0; j<bs->len; j++) {
-                       if (bs->array[j].ord) continue;
-                       if ((min==-1) || (es_menor(data, bs, j, min)))
-                               min = j;
-               }
+       qsort(bs->array, bs->len, sizeof(t_BlockSortData), __compare);
+}
 
-               bs->array[min].ord = 1;
-               bs->array[min].pos_orden = i;
+void print_(char *data, unsigned long int pos, unsigned long int len)
+{
+       unsigned long int i;
 
-               bs->ord[i] = min;
-       }*/
-       qsort(bs->array, bs->len, sizeof(t_BlockSortData), __compare);
+       for(i=0; i<len; i++)
+               printf("%c", data[(pos+i)%len]);
+       printf("\n");
 }
 
 int generar_salida(char *data, t_BlockSort *bs, char *salida)
@@ -80,6 +74,7 @@ int generar_salida(char *data, t_BlockSort *bs, char *salida)
        unsigned long int i, k;
        k=-1;
        for(i=0; i<bs->len; i++) {
+               /* print_(data, bs->array[i].pos_inicial, bs->len); */
                salida[i] = data[bs->array[i].pos_final];
                if (bs->array[i].ord == 1) k = i;
        }
@@ -130,7 +125,6 @@ t_BlockSort *bs_create(unsigned long int len)
 
        tmp = malloc(sizeof(t_BlockSort));
        tmp->array = malloc(sizeof(t_BlockSortData)*len);
-       tmp->ord = malloc(sizeof(unsigned long int)*len);
        tmp->len = len;
 
        return tmp;
@@ -140,7 +134,6 @@ t_BlockSort *bs_create(unsigned long int len)
 void bs_destroy(t_BlockSort *bs)
 {
        free(bs->array);
-       free(bs->ord);
        free(bs);
 }
 
index 099acb2fccab9fed78f6a4d923eb261521c6d599..5097d6cc928517cd514cb41b8ef1277a09e65dd7 100644 (file)
@@ -11,7 +11,6 @@ typedef struct _bs_t_ t_BlockSort;
 typedef struct _bs_data_t_ {
        unsigned long int pos_inicial;
        unsigned long int pos_final;
-       unsigned long int pos_orden;
        char ord; /* indica si esta ordenada */
 
        /* Guardo el puntero al padre */
@@ -21,7 +20,6 @@ typedef struct _bs_data_t_ {
 struct _bs_t_ {
        char *data;
        t_BlockSortData *array;
-       unsigned long int *ord;
        unsigned long int len;
 };
 
index 70280179c3566d737aa10619d90cc66c48f5a830..2c8abb925789144bff1ad2536bd11a5bd89aa016 100644 (file)
@@ -5,6 +5,7 @@ int main(int argc, char *argv[])
 {
        char *data; 
        char *salida;
+       char *orig;
        unsigned long int len, i, k, total;
        FILE *fp;
        char c;
@@ -23,8 +24,11 @@ int main(int argc, char *argv[])
 
        data = malloc(sizeof(char)*len);
        salida = malloc(sizeof(char)*(len+1));
+       orig = malloc(sizeof(char)*(len+1));
 
        salida[len] = '\0';
+       orig[len] = '\0';
+
        bs = bs_create(len);
 
        c = fgetc(fp);
@@ -39,9 +43,11 @@ int main(int argc, char *argv[])
                bs_solve(data, salida, bs, &k, i);
 
                /* XXX ACA SALIDA DEBERIA PASAR A LA SIGUIENTE ETAPA XXX */
-               if (argc == 3) 
-                       printf("%s -> %ld\n", salida, k);
-               else
+               if (argc == 3) {
+                       printf("BS : %s -> %ld\n", salida, k);
+                       bs_restore(orig, salida, k, i);
+                       printf("Orig : %s\n", orig);
+               } else
                        printf("%s", salida);
        }
        fclose(fp);
@@ -50,6 +56,7 @@ int main(int argc, char *argv[])
        printf("Total bytes : %ld\n", total);
        free(data);
        free(salida);
+       free(orig);
        return 0;
 }