Il problema sta nel fatto che effettui lo scambio ad ogni iterazione del ciclo for interno, invece devi fare lo scambio soltanto alla fine del ciclo for interno, dopo che in p e stato memorizzato l'indice del minimo.

Ecco il codice corretto:

codice:
void sel_sort(float *A, int n){
int i, j, p;
float min;

for (i=0; i<n-1; i++) {
    min = A[i];
    p = i;
        for (j=i+1; j<n; j++){
			if (A[j]<min){
                min = A[j];
                p = j;
            }
        }
        A[p] = A[i];
        A[i] = min;
	}
}
Il selection sort è uno degli algoritmi di ordinamento piu semplici e noti; il quicksort ha complessita temporale pari a O(n^2) sempre nel caso peggiore, anche se nei casi pratici si rivela l'algoritmo di ordinamento piu veloce.