roby89
ti sei dilungato ma a mio avviso , hai confuso sole le idee
puntatore a funzione come ti ho detto .
bisogna creare una semplicissima funzione scabia
due funzioni compare dai nomi dati nei prototipi
una che restituisce -1 se a < b
l'altra che restituisce -1 se a>b
e passarli alla funzione in seguito o di ordinamento crescente o di ordinamento decrescente
io sono un principiante autodidatta
l'unica cosa che mi è servita di quello che ha detto roby
è
if(compare(v[i],v[i-1])<0)
swap(&v[i],&v[i-1]);
posto come lo ho risolto io , ma solo per dimostrare che ha una risoluzione più
semplice della descrizione
codice:
#include <stdio.h>
#include <stdlib.h>
void bubble( int work[], const int size, int (*compare)( int a, int b ) );
int ascending( int a, int b );
int descending( int a, int b );
void swap( int *a, int *b );
int main(int argc, char *argv[])
{
int *array;
int i,j;
printf("Quanti elementi vuoi inserire nell'array ? \n");
scanf("%d",&i);
array=(int*)malloc(sizeof(int)*i);
for(j=0;j<i;j++)
{
printf("inserisci l'elemento %d -->",j+1);
scanf("%d",&array[j]);
}
printf("Come vuoi ordinare l'array ? \n1 ordine decrescente \n2 ordine crescente\n");
scanf("%d",&j);
if(j==1)
bubble( array , i, descending );
else if(j==2)
bubble( array , i, ascending );
//stampa vettore
for(j=0;j<i;j++)
printf("%d\n",array[j]);
system("PAUSE");
return 0;
}
int descending(int a, int b)
{
if(a>b)
return -1;
else
return 1 ;
}
int ascending(int a ,int b)
{
if(a<b)
return -1;
else
return 1 ;
}
void swap( int *a, int *b )
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void bubble( int v[], const int size, int (*compare)( int a, int b ) )
{
int i;
for(i=1;i< size;i++)
{
if((*compare)(v[i],v[i-1])<0)
swap(&v[i],&v[i-1]);
}
}