Ciao!!
ho creato una pagina c che inseriti dieci numeri li ordina mediante l'algoritmo del selection sort in modo crescente.
É prevista una funzione che controlli l'eventuale caso in cui l'ordine crescente sia raggiunto in anticipo: dà problemi perchè fa bloccare subito l'algoritmo.
Grazie!
codice:
#include <stdio.h> #define size 10
/* questo è il main del programma in cui si chiamano le tre funzioni per prendere in input, ordinare un array e farci una ricerca */
void input(int [], int);
void selectsort(int [], int);
void printarray(int[], int);
char orderer(int[], int);
main()
{
int numeri[size];
input(numeri,size);
selectsort(numeri,size);
system("PAUSE");
} /*fine main*/
/* inizio funzione input*/
void input(int vet[], int dim)
{ int i;
for(i=0; i<dim; i++)
{
printf("\n\n inserisci l'elemento numerico numero %d \n\n", i+1);
scanf("%d", &vet[i]);
} printarray(vet,dim);
} /* fine della funzione di input */
/* inizio della funzione di selectionsort */
void selectsort(int vet[], int dim)
{
int i, j, p, min; char flag ='d'; /* inizio doppio ciclo di for alla base del selection sort */ for(i=0; i<(dim-1) && flag == 'd'; i++)
{ /* preset min */ min = vet[i]; for(j=i;j<dim; j++) { /* ricerca del consueto minimo */ if(min > vet[j]) { min = vet[j]; p=j; } else { if(min==vet[j]) { p=j; } } /* fine ricerca minimo*/ } /* scambio di posizioni nel caso il min non sia già memorizzato nella posizione giusta inizio */ if(p!=i) { vet[p] = vet[i]; vet[i] = min; } /* scambio di posizioni fine*/ flag = orderer(vet, dim); } /* fine doppio ciclo */ /* stampa dell'array selection ordinato*/ printarray(vet,dim); } /* stampa un array inizio*/ void printarray(int vet[], int dim) { int i; printf("\n\n"); for(i=0; i<dim; i++) { printf("%d\t", vet[i]); } printf("\n\n"); } /* stampa un array fine*/ /* inizio funzione per il controllo dell'ordine degli elementi */ char orderer(int vet[], int dim) { int i, j; char ret='d'; printf(" controllo se per caso l'ordine e' arrivato prima del tempo"); for(i=0 ; i<dim; i++) { j= i+1; if(vet[i]>vet[j]) { ret = 'o'; } } return ret; } /* fine funzione per il controllo dell'ordine degli elementi */