Sarà che è notte..ma se non sbaglio ti sei scordato qualche parentesi graffa nell'if all'interno del secondo for
Questo è come l'hai scritto tu :
for(i=0; i<N; i++){
for(j=0; j<N; j++){
if((j>i) && (v[j]<v[i]))
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
}
Questo è come lo scriverei io :
for(i=0; i<N; i++){
for(j=0; j<N; j++){
if( j>i && v[j]<v[i])
{
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
}
}
Come l'hai scritto tu, in caso la condizione dell'if risultasse vera, eseguirebbe solo il primo comando successivo, e quindi gli altri due scambi li fa a prescindere dall'if, creando confusione nell'array e a volte anche andando a pescare valore che non hai inserito.