Non mi rubi tempo, ma sarebbe stato meglio se l'avessi fatta da solo. Comunque questa dovrebbe andare, fai delle prove perché io ne ho fatte solo un paio:
codice:
void selection_sort(int a[], int n)
{
int i, j, k, min, sorted;
double t;
for (i = 0; i < n; i++) {
sorted = 1;
min = i;
for (j = i + 1; j < n; j++) {
if (a[j] < a[min]) {
min = j;
}
if (a[j-1] > a[j]) {
sorted = 0;
}
}
if (sorted == 1) {
break;
}
t = a[min];
a[min] = a[i];
a[i] = t;
}
for (i = 0; i < n; i++) {
printf("Il %d numero e' = %d\n", i + 1, a[i]);
}
}
Presta attenzione al < invece di <= nel for esterno, va modificato anche nella precedente versione.
Come dicevo questa è solo una possibile soluzione, ci potrebbe essere qualcosa di meglio e in ogni caso anche questa potrebbe essere riscritta con un do-while in maniera tale da testare la condizione su sorted senza ricorrere a break.