Bonjour je suis en première année d'iut informatique et j'ai ce td en c++ à faire mais il y a un problème avec mon programme, pouvez-vous m'aider car j'ai beaucoup de mal en programmation? Merci beaucoup.

Voici l'énoncé:
Comparaison de deux algorithmes de tri

On souhaite comparer les performances de deux algorithmes de tri en les appliquant à un vecteur de 20 entiers ; les deux algorithmes sont ceux du tri par insertion et du tri à bulles, on les applique aux trois vecteurs particuliers suivants :

V1 : 51, 70, 52, 69, 53, 68, 54, 67, 55, 66, 56, 65, 57, 64, 58, 63, 59, 62, 60, 61 ;
V2 : 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51 ;
V3 : 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70 .

On décide de mesurer la complexité en temps d’exécution de ces deux algorithmes en comptant :

le nombre de comparaisons entre deux éléments du vecteur,
et le nombre de recopies d’un entier du vecteur, de mémoire à mémoire (une permutation de deux éléments, via une zone intermédiaire, comptant pour 3 recopies),

que chacun des deux entraîne sur les 3 vecteurs ci-dessus.

Travail à réaliser

1)implémenter, sous forme de deux procédures imbriquées, les deux algorithmes de tri par insertion et de tri à bulles ;
2)réaliser une procédure principale qui appelle chacun de ces deux algorithmes sur les 3 vecteurs V1, V2 et V3 ; pour éviter, lors des tests, d’avoir à ressaisir constamment les 3 vecteurs, vous pourrez en figer le contenu dans la principale par des instructions d’affectation directe comme :
V1(1) := 51 ; V1(2) := 70 ; … ; V1(20) := 61 ;
V2(1) := 70 ; etc……….
3)pour compter « automatiquement » les nombres de comparaisons et de recopies, vous intégrerez dans chacune des deux procédures de tri, des variables de comptage qui, initialisées à 0, augmenteront de 1 à chaque comparaison ou recopie effectuée ; en fin de procédure imbriquée, ces valeurs de compteurs seront rendues en sortie à la procédure principale qui les affichera.



Dossier à rendre :

le programme en C (procédures principale et imbriquées) ;
un tableau récapitulatif des nombres de comparaisons et de recopies effectuées par chacun des deux algorithmes sur chacun des 3 tableaux ;
vos conclusions personnelles quant aux performances comparées de ces deux algorithmes.

Ce que j'ai fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#include <stdio.h>
#include <stdlib.h>
 
void ini(int V1[20], int V2[20], int V3[20], int *N)
{
	V1[0]=51;
	V1[1]=70;
	V1[2]=52;
	V1[3]=69;
	V1[4]=53;
	V1[5]=68;
	V1[6]=54;
	V1[7]=67;
	V1[8]=55;
	V1[9]=66;
	V1[10]=56;
	V1[11]=65;
	V1[12]=57;
	V1[13]=64;
	V1[14]=58;
	V1[15]=63;
	V1[16]=59;
	V1[17]=62;
	V1[18]=60;
	V1[19]=61;
 
	V2[0]=70;
	V2[1]=69;
	V2[2]=68;
	V2[3]=67;
	V2[4]=66;
	V2[5]=65;
	V2[6]=64;
	V2[7]=63;
	V2[8]=62;
	V2[9]=61;
	V2[10]=60;
	V2[11]=59;
	V2[12]=58;
	V2[13]=57;
	V2[14]=56;
	V2[15]=55;
	V2[16]=54;
	V2[17]=53;
	V2[18]=52;
	V2[19]=51;
 
	V3[0]=51;
	V3[1]=52;
	V3[2]=53;
	V3[3]=54;
	V3[4]=55;
	V3[5]=56;
	V3[6]=57;
	V3[7]=58;
	V3[8]=59;
	V3[9]=60;
	V3[10]=61;
	V3[11]=62;
	V3[12]=63;
	V3[13]=64;
	V3[14]=65;
	V3[15]=66;
	V3[16]=67;
	V3[17]=68;
	V3[18]=69;
	V3[19]=70;
 
    *N=19;
}
 
 
int Permuter(int *a,int *b)
{
    int x;
 
    x=*a;
    *a=*b;
    *b=x;
}
 
int tri_bulles(int V[],int N)
{
    int J, N1, Trie, reco;
 
    N1=N;
    Trie=0;
    reco=0;
 
    while (N1>=1 && Trie==0)
    {
        Trie=1;
        for(J=0;J<=(N1-1);J++)
        {
            if (V[J]>V[J+1])
            {
                reco=reco+3;
                Permuter(&V[J],&V[J+1]);
                Trie=0;
            }
        }
        N1=N1-1;
    }
    return reco;
}
 
int tri_bulles_compa(int V[],int N)
{
    int J, N1, Trie, compa;
 
    N1=N;
    Trie=0;
    compa=0;
 
    while (N1>=1 && Trie==0)
    {
        Trie=1;
        for(J=0;J<=(N1-1);J++)
        {
            if (V[J]>V[J+1])
            {
                Permuter(&V[J],&V[J+1]);
                Trie=0;
            }
        compa=compa+1;
        }
        N1=N1-1;
    }
    return compa;
}
 
int tri_par_insertion(int t[20], int N) {
    int i,p,j,reco;
    double x;
 
    reco=0;
    for (i = 1; i < 20; i++) {
        x = t[i];
        reco=reco+1;
 
        for(p = 0; t[p] < x; p++);
 
        for (j = i-1; j >= p; j--) {
            reco=reco+1;
            t[j+1] = t[j];
        }
 
        t[p] = x;
        reco=reco+1;
    }
    return reco;
}
 
int tri_par_insertion_compa(int t[20], int N) {
    int i,p,j,compa;
    double x;
 
    compa=0;
    for (i = 1; i < 20; i++) {
        x = t[i];
 
        for(p = 0; t[p] < x; p++);
 
        for (j = i-1; j >= p; j--) {
            t[j+1] = t[j];
            compa=compa+1;
        }
 
        t[p] = x;
    }
    return compa;
}
 
void affiche(int T1[],int T2[],int T3[], int N)
{
    int i;
 
    for (i=0;i<10;i++)
    {
        printf("V1[0%d]=%ld     V1[0%d]=%ld     V1[0%d]=%ld\n ", i, T1[i], i, T2[i], i, T3[i]);
    }
 
    for (i=10;i<20;i++)
    {
        printf("V1[%d]=%ld     V1[%d]=%ld     V1[%d]=%ld\n ", i, T1[i], i, T2[i], i, T3[i]);
    }
}
 
int main()
{
    int V1[20],V2[20],V3[20],Perm[3],Cpr[3],N,A,B,reco1,reco2,reco3,compa1,compa2,compa3,reco11,reco12,reco13,compa21,compa22,compa23;
 
	ini(V1,V2,V3,&N);
	printf("V1 NON TRIE   V2 NON TRIE   V3 NON TRIE\n\n ");
	affiche(V1,V2,V3,20);
	reco1=tri_bulles(V1,N);
	reco2=tri_bulles(V2,N);
	reco3=tri_bulles(V3,N);
 
	ini(V1,V2,V3,&N);
	compa1=tri_bulles_compa(V1,N);
	compa2=tri_bulles_compa(V2,N);
	compa3=tri_bulles_compa(V3,N);
 
	ini(V1,V2,V3,&N);
	reco11=tri_par_insertion(V1,N);
	reco12=tri_par_insertion(V2,N);
	reco13=tri_par_insertion(V3,N);
 
	ini(V1,V2,V3,&N);
	compa21=tri_par_insertion_compa(V1,N);
	compa22=tri_par_insertion_compa(V2,N);
	compa23=tri_par_insertion_compa(V3,N);
 
	printf("\n",B);
	printf("\n  V1 TRIE       V2 TRIE       V3 TRIE\n\n ");
	affiche(V1,V2,V3,20);
    printf("\nTRI PAR BULLE\n\nNombre de recopies V1 : %d\n", reco1);
    printf("Nombre de recopies V2 : %d\n", reco2);
    printf("Nombre de recopies V3 : %d\n", reco3);
    printf("\nNombre de comparaisons V1 : %d\n", compa1);
    printf("Nombre de comparaisons V2 : %d\n", compa2);
    printf("Nombre de comparaisons V3 : %d\n", compa3);
 
    printf("\nTRI PAR INSERTION\n\nNombre de recopies V1 : %d\n", reco11);
    printf("Nombre de recopies V2 : %d\n", reco12);
    printf("Nombre de recopies V3 : %d\n", reco13);
    printf("\nNombre de comparaisons V1 : %d\n", compa21);
    printf("Nombre de comparaisons V2 : %d\n", compa22);
    printf("Nombre de comparaisons V3 : %d\n", compa23);
	return 0;
}