estoy practicando punteros a funciones, por eso hago el programa de esta forma, en la funcion intercambio, cuando la llamo en qshort me tira un error, a que se refiere?? como lo puedo solucionar?? como le debo pasar los argumento "derecha" y "izquierda "a la función intercambio llamado en qshort que recibe punteros a "derecha" y "izquierda", que deberan ser pasados a la funcion que llamara.
perdon si los confundi.
muchas gracias desde ya!!!
[MOD] Al publicar código, usar las etiquetas GeSHi
#include <stdio.h>
void qshort(int*array,int*izquierda,int*derecha,int(*intercambio)(int,int),int(*comp)(int,int));
void intercambio(int a[],int izquierda,int derecha);
int comp(int a,int b);
int main()
{
int array[]={6,1,9,8,2,7,4,0,3,5};
int izquierda,derecha,i;
izquierda=0;
derecha=9;
for(i=0;i<10;i++)
{
printf("array[%d] = %d\n",i,array[i]);
}
qshort(array,&izquierda,&derecha,intercambio,comp);
printf("\n\n");
for(i=0;i<10;i++)
{
printf("array[%d] = %d\n",i,array[i]);
}
return 0;
}
void intercambio(int a[],int derecha,int izquierda)
{
int temp;
temp=a[izquierda];
a[izquierda]=a[derecha];
a[derecha]=temp;
}
void qshort(int array[],int*izquierda,int*derecha,int(*intercambio)(int,int),int(*comp)(int,int))
{
int pivote,i;
pivote=*izquierda+*derecha/2;
while(*izquierda<*derecha)
{
while(comp(array[*izquierda],array[pivote]))
{
*izquierda+=1;
}
while(comp(array[pivote],array[*derecha]))
{
printf(".\n");
*derecha-=1;
}
intercambio(array,*izquierda,*derecha);
for(i=0;i<10;i++)
{
printf("array[%d] = %d\n",i,array[i]);
}
system("pause");
}
}
int comp(int a,int b)
{
if(a<b)
{
return 1;
}
else if(a>b)
{
return 0;
}
}
Creo que es porque defines 2 parámetros aqui:
int(*intercambio)(int,int)
pero en realidad en el método usas 3 y debe retornar void, debería ser así:
void(*intercambio)(int[],int,int)
Saludos ;-)