J'essaie de compter le nombre de comparaisons effectuées par l'algorithme de tri de tas. mon code est basé sur la file d'attente prioritaire et je veux savoir où je devrais mettre le compteur. Voici ce que j'ai, mais quand j'essaie d'imprimer le compteur, il montre zéro compte, qu'est-ce que je fais mal? Je vous remercie.Comptage du nombre de comparaisons effectuées dans Heapsort
ici est la fonction heapbuild:
#include<iostream>
vector<int> pq_keys;
void buildHeap()
{
int size = pq_keys.size();
int midIdx = (size -2)/2;
while (midIdx >= 0)
{
shiftRight(midIdx, size-1);
--midIdx;
}
et c'est la fonction qui fait la comparaison:
int shiftRight(int low, int high)
{
int root = low;
int counter=0;
while ((root*2)+1 <= high)
{
int leftChild = (root * 2) + 1;
int rightChild = leftChild + 1;
int swapIdx = root;
if (pq_keys[swapIdx] < pq_keys[leftChild])
{
counter++;
cout<<counter;
swapIdx = leftChild;
}
/*If right child exists check if it is less than current root*/
if ((rightChild <= high) && (pq_keys[swapIdx] < pq_keys[rightChild]))
{
counter++;
swapIdx = rightChild;
}
/*Make the biggest element of root, left and right child the root*/
if (swapIdx != root)
{
counter++;
int tmp = pq_keys[root];
pq_keys[root] = pq_keys[swapIdx];
pq_keys[swapIdx] = tmp;
root = swapIdx;
}
else
{
break;
}
}
return counter;
}
Veuillez fournir un [MCVE]. –
merci pour le lien mais j'ai seulement posté deux fonctions, la principale qui appelle la fonction qui compare réellement les entiers et les trie. donc je ne sais pas vraiment quels changements je peux apporter à ma question pour le rendre plus présentable. – farah