=> Que fait cette fonction ?
Le principe de l´algorithme :
POUR i DE 0 A (dim-1) FAIRE
POUR j DE 0 A (dim-1) FAIRE
Si tab[i]>tab[j] ALORS
tmp=tab[i]
tab[i]=tab[j]
tab[j]=tab[i]
Donc pour j variant de 0 a (dim-1),on compare tab[j] à tab[i].
i.e : pour j=0..(dim-1),i=0 : tab[0] avec tab[0],tab[1] avec tab[0], .....,tab[dim-1] avec tab[0].
pour j=0..(dim-1),i=1 : tab[0] avec tab[1],tab[1] avec tab[1], .....,tab[dim-1] avec tab[1].
Ainsi de suite jusqua i=dim-1.
=> Quand on met un tableau et ses elements (dans le code de neoknight) comment dire que le tableau[i] et plus faible que le tableau [j] ?
Si on a un tableau tab par exemple:
int tab[]={2,4,5,8,9}
tab[2] designe le 3eme élement du tableau (car le tableau est numéroté de 0 à (n-1). i.e: tab[2]=5
Donc pour comparer tab[i] et tab[j] on compare juste 2entiers entre eux.
Si tab[i]>tab[j] on echange les 2 cases du tableau i et j.
=> De plus, j´avais entendu que inserer deux for pour completer un tableau à plus d´une dimension (par exemple) completait le tableau en diagonale ! Est-ce faux ?
Euh je comprends pas trop bien la question, si tu as un tableau a 2 dimensions:
int tab[n][m] de taille n x m.
Alors si tu fais tourner 2 boucles imbriqués tel que:
for (i=0;i<n;i++) {
for (j=0;j<m;j++) {
tab[i][j]=1;
}
}
Tout les élements de ton tableau vont etre mis à 1.
Par exemple pour n=3 m=4.
1111
1111
1111
Par contre si tu fais tourner une seule boucle:
for (i=0;i<n;i++) {
tab[i][i]=1;
}
Seul les éleménts de ton tableau d´indice respectant l´equation i=i ( i.e: la diagonale du tableau ) vont etre mis à 1:
1000
0100
0010
0001
P.S:
D´ailleurs il me semble que l´algorithme n´est pas le plus efficace ( n+n+n...+n calculs avec n opérantes, i.e: n² ).
Il serait plus judicieux de faire varier j de (i+1) à (dim-1).
((n-1)+(n-2)+(n-3)+...1 calculs) .
Car les éléments du tableau tel que j<=i sont déja triés.