Ciao, ci sono un paio di cose che non vanno.
A scambia dovresti passargli il puntatore al primo e all' ultimo elemento della porzione di array da analizzare. p č il primo, ma l'ultimo sei sicuro che sia p + dim? ricorda che gli indici partono da 0; Es dim = 5, p = 0, l'ultimo elemento č un posizione 4 e non 5.
A questo punto riapplichi ricorsivamente lo stesso regionamento alla sotto sequenza non considerando il primo e l'ultimo elemento, quindi la dimensione non diminuisce di 1 ma bensi di ...
Inoltre i, j, aus e if(dim == 1) non ti servono.
Infine nel main devi passare la dimensione effettiva dell' array (non decrementata di 1).

PS, se al posto di usare la ricorsione in coda usassi quella in testa, potresti scrivere la stessa funzione con meno istruzioni e senza bisogno di metodi ausiliari