You will need a place for a temporary variable and loop / index counters. The usual "order" according to the algorithm will also change the index [] back to {0, 1, 2, 3, 4}.
Hint, noting the order of indexes in the index [].
{0, 1, 2, 3, 4} index[] = {3, 0, 4, 1, 2}
Reordering can be performed by following "cycles". Start with index [0] and pay attention to "loops" if you look at index [0], then at index [index [0]], etc ...
// 1st cycle index[0] == 3 // cycle starts at 0 index[3] == 1 index[1] == 0 // end of cycle since back at 0 // 2nd cycle index[2] == 4 // cycle starts at 2 index[4] == 2 // end of cycle since back at 2
C code example:
The same algorithm, but uses swaps instead of moves (this is a slower method).
#include <stdio.h>
source share