Bonjour, je viens vous demander de l'aide sur mon code pour le tri par tas j'ai éplucher pas mal de vidéo et de pdf et autre site qui traitaient du tri par tas et j'ai fait comme indiquer mais mon code de tri par tas est hyper lent pour 200 000 entier triè il met 20 seconde.
Pourriez-vous m'aider et me dire ou est mon problème je pense qu'il y a quelque chose dans la procédure que je n'ai pas du saisir.
je travail sous emacs et cygwin
Je suis débutant.
Merci par avance.
Code :
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 #include <stdio.h> #include <stdlib.h> #include <math.h> #define SIZE 200000 int main (int argc, char *argv[]) { int tmp, i, n, m=0, a = 0, j, f = 0, k; int len = SIZE, r = SIZE-1; int* T = malloc(sizeof(int) * SIZE); int* H = malloc(sizeof(int) * SIZE); ; /*Tableau T décroissant*/ for(i = 0; i < len; i++) { T[i]=r; r--; } /*Affichage du tableau T*/ /*for(i = 0; i < SIZE; i++) printf("%d ",T[i]);*/ /*On par du bas à droite de L'arbre vers la gauche puis on remonte en partant de la droite le plus petit élément*/ for(j = 0; j <SIZE; j++) { for(i = (len/2)-1 ; i >=0; i--) { k=2*i; if(k+2 < len) { if(T[k+2] < T[i]) { tmp = T[i]; T[i] = T[k+2]; T[k+2] = tmp; } } if(k+1 < len) { if(T[k+1] < T[i]) { tmp = T[i]; T[i] = T[k+1]; T[k+1] = tmp; } } } /*Mise du plus petit élément du tas dans le tableau H et reduction de la taille du tableau T et permutation du dernier élément du tableau T dans la première case du tableau T*/ H[j] = T[a]; T[a] = T[len-1]; len--; } /*Affichage du tableau H*/ /*for(i = 0; i < SIZE; i++) printf("%d ",H[i]);*/ free(T); free(H); return EXIT_SUCCESS; }
Partager