Comment implémenter la fonction OrderElements
suivante?Comment permuter un tableau dans un ordre donné avec O (1) espace auxiliaire?
char chars[] = {'a', 'b', 'c', 'd', 'e'};
int want_order[] = {2, 4, 3, 0, 1};
int length = 5;
OrderElements(chars, want_order, length);
// chars now contains: c, e, d, a, b
Il est facile lorsque vous pouvez utiliser un espace supplémentaire linéaire, mais peut-il être fait avec seulement un espace supplémentaire constant, à savoir, le tri directement les éléments chars
en place?
P.S .: Ce n'était pas une question d'examen; J'ai vraiment besoin de cette fonction.
CLARIFICATION: Il semble y avoir un malentendu sur l'ordre final désiré des éléments. Le tableau résultant dans l'exemple doit comporter les éléments suivants, en se référant au tableau chars
d'origine:
{chars[2], chars[4], chars[3], chars[0], chars[1]}
qui est
{'c', 'e', 'd', 'a', 'b'}.
Le mélange est-il effectué selon un poids ou une spécification prédéfinie? –
@astander: Je ne comprends pas votre question. want_order spécifie l'ordre que nous voulons ... – Frank
Je pense que vous devez élaborer ce que vous entendez par mémoire auxiliaire. Si vous voulez dire "espace" ce n'est pas possible car l'index ne peut pas être représenté en O (1) – Mike