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]); } }

Rispondi quotando