#include "mtf.h"
/****privadas*****/
-int no_pertenece(char *z, char c);
+int no_pertenece(char *z, char c, int len);
void pop_front(char *z, int pos);
{
int i;
for(i=0; i<len; i++)
- printf("%c", z[i]);
- printf("\n");
+ fprintf(stderr, "%c", z[i]);
+ fprintf(stderr, "\n");
}
+int comparar(const void *d1, const void *d2)
+{
+ char *c1, *c2;
+
+ c1 = (char *)d1;
+ c2 = (char *)d2;
+
+ return (*c1) - (*c2);
+}
int *jacu_mtf(char *datos, int len)
{
pos = (int*)malloc(len*sizeof(int));
z = jacu_buscar_z(datos, len, &size);
- printf("Z original = ");
+ fprintf(stderr, "Z original = ");
print_z(z, size);
- printf("SIZE = %d\n", size);
- z[0]='A';z[1]='B';z[2]='C';z[3]='D';z[4]='R';
+ fprintf(stderr, "SIZE = %d\n", size);
+ /*z[0]='A';z[1]='B';z[2]='C';z[3]='D';z[4]='R';*/
+ /* Ordeno */
+ qsort(z, size, 1, comparar);
+ fprintf(stderr, "Z ordenado = ");
+ print_z(z, size);
+
for(i=0; i<len; i++){
pos[i] = get_pos(z, size, datos[i]);
- printf("vino %c emiti: %d\n",datos[i], pos[i]);
+ fprintf(stderr, "vino %c emiti: %d\n",datos[i], pos[i]);
if (pos[i] != 0)
pop_front(z,pos[i]);
print_z(z, size);
char *jacu_buscar_z(char* datos, int len, int *size)
{
char *z;
- int i, j=1;
+ int i, j=0;
- z = (char*)malloc(1);
- if (z==NULL) return NULL;
+ z = NULL; /*(char*)malloc(1);*/
+ /*if (z==NULL) return NULL;*/
for(i=0; i<len; i++){
- if( no_pertenece(z, datos[i]) ){
+ if( no_pertenece(z, datos[i], j) == -1 ){
j++;
z = realloc(z, j*sizeof(char));
- z[j]=datos[i];
+ z[j-1]=datos[i];
*size = j;
}
}
}
-int no_pertenece(char *z, char c)
+int no_pertenece(char *z, char c, int len)
{
int i;
/* XXX Z NO TIENE 255 POSICIONES XXX */
- for(i=0; i<255; i++)
+ for(i=0; i<len; i++)
if (z[i] == c)
return 0;
return -1;
int get_pos(char *z, int len, char c)
{
int pos;
+ if (z==NULL) return -1;
+
for(pos=0; pos<len; pos++)
if ( z[pos] == c )
return pos;