voilà j'arrive à ceci pour la fonction qui crée le tas et j'inclus la heapsort avec
je pense que le problème vient de la fonction sift mais je ne comprend pas trop ce qu'il manque...toutes les valeurs sont triées excepté la dernière valeur du vecteur qui semble oubliée...et je ne vois pas trop quoi changer pour qu'elle soit prise en compte :s
merci de votre aide.
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 void sift (int v[10], int indice_deb, int indice_max) { int ifils, tmp=0, i; ifils=(indice_deb*2)+1; i=indice_deb; while (i<(indice_max-2)/2) { if (v[ifils] < v[ifils+1]) { tmp=v[ifils+1]; v[ifils+1]=v[ifils]; v[ifils]=tmp; } tmp=0; if (v[ifils] > v[i]) { tmp=v[i]; v[i]=v[ifils]; v[ifils]=tmp; } i++; ifils++; } } void heapsort (int v[10], int indice_max) { int start=(indice_max/2)-1; int end=indice_max-1; int tmp; while (start!=0) { sift(v,start,indice_max); start--; } tmp=0; while (end > 0) { tmp=v[end]; v[end]=v[0]; v[0]=tmp; sift(v,0,end+1); end--; } }
Partager