Jest sprytne rozwiązanie bez dodatkowych zmiennych, bez swapa() z algorithm.h - polega na kilkukrotnym XORowaniu

Kod
// ogolnie
a^=b^=a^=b;
// w twoim wypadku
array[i]^=array[j]^=array[i]^=array[j];
Nie wiem jak z efektywnością tego rozwiązania - jedno jest pewne - działa

Jak ktoś nie wierzy niech sobie rozpisze bity i sie przekona.