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.