<div>Hola metuskale, en realidad no lo necesitás para implementar la función. Lo que sí deberías hacer es al llamar a tu función de ordenación es castear la función de comparación a (int (*)(void*,void*)).</div><div><br></div>

<div>Tu función necesitaría un puntero al arreglo, el tamaño de cada elemento, la cantidad de elementos y la función de comparación.<br></div><div><br></div><div>En realidad la función de ordenamiento (en este caso, pero sucede en forma similar con las de búsqueda y otras tantas) no tiene noción acerca de la naturaleza de los elementos del arreglo, eso queda relegado a la función de comparación, pero dado que para realizar el ordenamiento es necesario mover elementos se necesita saber el tamaño de estos.</div>

<div><br></div><div>Mirá esta implementación de selection sort:</div><div><br></div><div><br>void ordena(void *a,int t_size,int v_size,int (*f)(void *,void *))<br>{<br>   int i,j,min;<br>   void *tmp;<br><br>   tmp = malloc(t_size);<br>

   if(!tmp) return;<br><br>   for(i = 0;i < v_size-1;i++)<br>   {<br>       min = i;<br>       for(j = i+1;j < v_size;j++)<br>       {<br>           if(f(a+min*t_size,a+j*t_size) >= 0)<br>           {<br>               min = j;<br>

           }<br>       }<br>       memcpy(tmp,a+i*t_size,t_size);<br>       memcpy(a+i*t_size,a+min*t_size,t_size);<br>       memcpy(a+min*t_size,tmp,t_size);<br><br>   }<br>   free(tmp);<br><br>}<br></div><div><br></div>

<div>Esto compila con gcc por que trata la aritmética de punteros void como si se tratase de punteros char, pero con otros compiladores habría que hacerse el casteo explícito a char *.</div><div><br></div><div>Saludos<br>

</div><div><br></div><div class="gmail_quote">El 1 de octubre de 2011 11:55, Pablo Alejandro Herrero <span dir="ltr"><<a href="mailto:pablusplus@gmail.com">pablusplus@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hola. Tenés varias opciones pero lo mas rápido que se me ocurre es que indiques el tipo de dato con otro parámetro:<div><br></div><div><br></div><div><div>#define   ENTERO    0</div></div><div><div>#define   FLOTANTE 1 </div>



</div><div><div>#define   CADENA    2</div></div><div><br></div><div>bubble(void *array, tipo_retorno <span style="font-family:'courier new';font-size:13px;line-height:14px;background-color:rgb(255, 255, 255)">*</span>puntero_a_funcion<span style="font-family:'courier new';font-size:13px;line-height:14px;background-color:rgb(255, 255, 255)">(tipo_args</span><span style="font-family:'courier new';font-size:13px;line-height:14px;background-color:rgb(255, 255, 255)">)</span>, int tipo){</div>



<div>    ...</div><div>    switch(tipo)</div><div><div><div>         case ENTERO:</div><div>              ...(int *)array[índice_a_elemento]...</div><div>         break;</div></div><div><div>         case FLOTANTE:</div>



</div><div>               ...(float *)array[índice_a_elemento]...</div><div><div>         break;</div></div><div><div>         case CADENA:</div></div><div>               ...(char *)array[índice_a_elemento]...</div><div>


<div>
         break;</div></div><div>         default:</div></div><div>         break;</div><div>}</div><div><div><br></div><div><br></div><div>seria algo asi: indicar el tipo de dato, y usar una selección explícita de tipo (explicit cast). Cuidado con: hay que indicar los argumentos de la funció en puntero_a_función (yo usaria el operador ... para definirla, aunque después tenés que tomar los parámetros desde la pila) y lo otro es que indice_a_elementos no debe exceder el tamaño del array porque sino tenés una excepción por violacion de acceso a memoria. Espero te sirva!</div>



<div><br></div><div><br><div class="gmail_quote">El 1 de octubre de 2011 06:02, metuskale <span dir="ltr"><<a href="mailto:metuskale@gmail.com" target="_blank">metuskale@gmail.com</a>></span> escribió:<div><div class="h5">

<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Buenas, estoy intentando realizar unas funciones lo mas genéricas<br>
posibles con el fin de crear una pequeña librería y re aprovecharla en<br>
varias practicas.<br>
Lo primero que quiero hacer, y que servirá de ejemplo es un bubbleSort<br>
que reciba un array de tipo void y un puntero a una funcion de<br>
comparacion en funcion del tipo que se quiera ordenar.<br>
El problema que tengo y no se como resolver es como usar y convertir<br>
el tipo void o void* del array al tipo correcto, es decir:<br>
<br>
void bubble (void* datos, "puntero a funcion") {<br>
<br>
<br>
<br>
}<br>
<br>
Saludos y gracias a todos<br>
<font color="#888888"><br>
--<br>
David de Alvarado Lacruz<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</font></blockquote></div></div></div><br></div></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br>