Bonsoir,
tout se passe dans le code suivant comme si temp subissait les modifications du tableau d’origine.
En effet, au lieu d’avoir le tableau trié dans l’ordre inverse, je récupère une moitié dans l’ordre et l’autre étant l’image de la première (987654321 donne 123454321 au lieu de 123456789)
if (!ordreCroissant){
temp = donneesAAjouter.clone();
System.out.println("temp.length : "+temp.length);
for (i=0 ; i < donneesAAjouter.length ; i++)
for (j=0 ; j < nbChamps ; j++)
donneesAAjouter[i][j]=temp[donneesAAjouter.length-i-1][j];
}
Alors je le dis un peu au feeling, mais clone va copier ta première dimension de tableau, du coup tu va avoir 2 tableaux (donneesAAjouter et temp) qui référencent les même nbChamps. Il faut appliquer le clone sur tout les tableaux de second niveau. Tu peut aussi utiliser un tableau à une seule dimension, c’est plus performant.
Et pour expliquer pourquoi c’est plus performant, il y a deux choses :
[ul]
[li]dans la version à 2 dimensions, tu as 2 indirections (à partir d’un pointeur tu calcul un premier offset qui te donne un autre pointeur sur le quel tu calcul un second offset pour trouver ta donnée)[/li]
[li]dans la version à 2 dimensions, tu as pleins de tableaux qui peuvent être très dispersé en mémoire, ça contribue à la fragmentation de celle-ci, c’est nuisible pour les performances[/li][/ul]
@MisterFreez : non effectivement je pensais uniquement aux tableaux statiques. Évidemment pour des tableaux alloués dynamiquement avec malloc ça fonctionne pas.
@fran.b : j’admets, “orthogonal” n’est pas forcément le bon terme. Mais je ne pensais ni à NN ni à NP, mais à Nx? (la deuxième dimension est variable selon l’index sélectionné dans la première dimension). Autrement dit, ni carré ni rectangulaire :