Il confronto nel while interno ovviamente va fatto su temp e temp->succ,non au aux, visto che stai scorrendo temp e non aux.
Comunque sbagli a scorrere la lista.Perchè lo confronti sempre con p, che è il primo?
L' ordinamento deve essere dinamico, devi confrontare gli elementi adiacenti, perchè confrontarlo sempre col primo elemento?
Scorri la lista così:
codice:
void ordine(struct elemento *p)
{
     int valore;
     struct elemento *aux,*temp;
     aux=p;
     while(aux->succ!=NULL)
    {
        temp=aux;
        while(temp->succ!=NULL)
        {
            {...}  // fai il confronto tra temp e temp->succ
            temp=temp->succ;
        }
        aux=aux->succ;
    }                  
}