Tas de Tri en C++

Bon, alors après avoir lutté avec le fait d'essayer de débogage, j'ai finalement renoncé. Je suis un débutant en C++ & Structures de Données et je suis en train de mettre en œuvre des Tas de Tri en C++. Le code qui suit donne de bons résultats sur les nombres entiers positifs, mais semble échouer lorsque j'essaie d'entrer un peu de nombres entiers négatifs.

S'il vous plaît signaler des erreurs/incohérences dans le code suivant. Aussi, toutes les autres suggestions/critiques concernant le sujet sera volontiers apprécié.

//Heap Sort
#include <iostream.h>
#include <conio.h>
int a[50],n,hs;
void swap(int &x,int &y)
{
int temp=x;
x=y;
y=temp;
}
void heapify(int x)
{
int left=(2*x);
int right=(2*x)+1;
int large;
if((left<=hs)&&(a[left]>a[x]))
{
large=left;
}
else
{
large=x;
}
if((right<=hs)&&(a[right]>a[large]))
{
large=right;
}
if(x!=large)
{
swap(a[x],a[large]);
heapify(large);
}
}
void BuildMaxHeap()
{
for(int i=n/2;i>0;i--)
{
heapify(i);
}
}
void HeapSort()
{
BuildMaxHeap();
hs=n;
for(int i=hs;i>1;i--)
{
swap(a[1],a[i]);
hs--;
heapify(1);
}
}
void main()
{
int i;
clrscr();
cout<<"Enter length:\t";
cin>>n;
cout<<endl<<"Enter elements:\n";
for(i=1;i<=n;i++)       //Read Array
{
cin>>a[i];
}
HeapSort();
cout<<endl<<"Sorted elements:\n";
for(i=1;i<=n;i++)       //Print Sorted Array
{
cout<<a[i];
if(i!=n)
{
cout<<"\t";
}
}
getch();
}

J'ai lu sur des Tas de Tri mais je ne suis pas en mesure de saisir la plupart du concept, et sans qui je ne suis pas tout à fait en mesure de corriger l'erreur de logique(s) ci-dessus.

  • J'ai ajouté les devoirs de la balise. Si ce n'est pas, n'hésitez pas à le supprimer.
  • ce qui se passe lorsque vous utilisez des nombres négatifs sur l'entrée? Donner un exemple d'entrée et de sortie.
  • quelles sont les erreurs?
  • Obtenir une copie de la Programmation des Perles par Jon Bentley, et de lire le chapitre sur le tas. Voir product.half.ebay.com/...
  • Je ne vois pas comment quelque chose comme cela pourrait fonctionner avec des nombres positifs, mais pas avec les négatifs... Il n'a probablement pas travailler avec des points positifs, vous n'en avez pas remarqué encore.
  • Voici un exemple de sortie de quand il fonctionne correctement: Entrer la longueur: 10 Entrez éléments: 10 9 8 7 6 5 4 3 2 1 éléments Triés: 1 2 3 4 5 6 7 8 9 10
  • Et ici, la sortie est incorrect. Notez que tous les nombres sont triés à l'exception de la dernière. Entrer la longueur: 10 Entrez éléments: -300 -250 -500 -20 0 0 1 75 100 200 éléments Triés: -500 -250 -20 0 0 1 75 100 200 -300
  • Tout d'abord un tas n'est pas triée. Votre "Impression tableau trié" commentaire n'est pas vrai.
  • Exemple de sortie est au-dessus. Désolé pour le commentaire redondant. J'ai oublié de vous identifier sur le précédent, et je crois que nous ne pouvons pas modifier les commentaires après un certain temps.
  • Chatterjee: ajouter 1000 à chaque élément lors de l'alimentation d'entrée. Si je suis de droite qui va échouer, mais pas les nombres négatifs.
  • Ce qui sur terre est <iostream.h>?
  • Oui, vous avez raison! Entrer la longueur: 10 Entrez éléments: 700 750 500 980 1000 1000 1001 1075 1100 1200 éléments Triés: 500 750 980 1000 1000 1001 1075 1100 1200 700
  • Mon grand-grand-père iostream.
  • Il était censé facétieusement, pour souligner l'autodérision. 🙂

InformationsquelleAutor Siddharth | 2011-09-22