Je suis en train d'écrire un programme qui nécessite d'utiliser un tas, et tout fonctionne bien en dehors de mes méthodes de tri, évidemment très important! Je ne suis pas sûr de ce qui ne va pas avec ma logique ou s'il me manque quelque chose de stupide. Mais une nouvelle paire d'yeux pour regarder ça serait bien.C++ sift down tas
La fonction est en train de passer mon vecteur qui est bien sûr le tas, l'emplacement de la racine, puis soit la STL soit moins ou plus grand comme prédicat.
template<class T,class P>
void upheap(vector<T>& v, int start, P func) {
T x = v[start];
while (start > 1 && func(x, v[start/2])) {
v[start] = v[start/2]; start /= 2;
}
v[start] = x;
}
Une idée de ce qui ne va pas?
Vous dites que vous passez la racine du tas? Ne devriez-vous pas passer l'index de l'élément qui doit être amélioré? –
désolé ouais c'est ce que je voulais dire c'est la valeur de l'index. – rajh2504
Peut-être que vous devriez écrire les invariants, les pré-conditions et les post-conditions, et peut-être que vous verrez le problème. Par exemple, la condition 'HEAP (i = 0 .. start-1)' est-elle vraie à l'entrée? Et puis l'objectif est que la condition 'HEAP (i = 0..start)' soit vraie à la sortie? –