#include<iostream.h>
#include<stdlib.h>

int decrescente(const void *, const void *);
int crescente(const void *, const void *);

int main(int argc, char **argv){

 int *numeri;
 int n, opz;
 int (*compara)(const void *, const void *); // puntatore a funzione

 cout << "\nInserisci un numero di valori da ordinare: ";
 cin >> n;

 numeri=new int[n];

 if(!numeri){
  cout << "Errore memoria esaurita!" << endl;
  exit(EXIT_FAILURE);
  }

 for(int ii=0; ii<n; ++ii)
   numeri[ii]=rand();

 cout << "\nInserisci 0 per ordinarli in senso decrescente: ";
 cin >> opz;

 if(!opz)
  compara=decrescente;
 else
  compara=crescente;
 
 qsort((void *)numeri, n, sizeof(int), compara);

 for(int ii=0; ii<n; ++ii)
   cout << ii << " - " << numeri[ii] << endl;

 
 return 0;
}


int decrescente(const void *a, const void *b){
 return(*((int *)a)<*((int *)b))?1:0;
}

int crescente(const void *a, const void *b){
 return(*((int *)a)>*((int *)b))?1:0;
}