2011-10-02 6 views
0

j'ai code suivant pour heapsortmise en œuvre de heapsort en C++

#include <iostream> 
using namespace std; 
void exch(int a[],int i,int j){ 
     int s=a[i]; 
     a[i]=a[j]; 
     a[j]=s; 
     } 
void sink(int a[],int k,int n){ 
//int n=sizeof(a)/sizeof(int); 
while(2*k<=n){ 
    int j=2*k; 
    if (j<n && (a[j]<a[j+1])) j++; 
    if (a[k]>=a[j]) break; 
    exch(a,k,j); 
    k=j; 


} 
    } 


    void heapsort(int a[]){ 
    int n=sizeof(a)/sizeof(int); 
    for (int k=n/2;k>=1;k--) 
      sink(a,k,n); 
    while(n>1){ 
    exch(a,1,n--); 
       sink(a,1,n); 


    } 

     } 
int main(){ 

    int a[]={12,3,5,1,67,10,9.20}; 
    int n=sizeof(a)/sizeof(int); 
    heapsort(a); 

      for (int i=0;i<n;i++){ 
      cout<<a[i]<<" "; 


      } 
       return 0; 


} 

mais résultat, il me montre ressemble à ceci

12 3 5 1 67 10 9 Press any key to continue . . . 

regarder aussi que dans mon tableau nombre total est 8 et ici, il me montre 7 en tant que sortie, je pense que le noyau de ce problème devrait être ce

1>c:\users\datuashvili\documents\visual studio 2010\projects\heap\heap\heap.cpp(36): warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data 

il semble que la perte possible de données tout en con convertissant de la double int code vigueur ne fonctionne pas correctement, suis-je raison ou tort s'il vous plaît me aider

Répondre

3

En plus de tous les autres commentaires (sizeof(a), en passant [] comme arguments, ayant un . dans la init-list), vous voulez écrire du code C++, n'est-ce pas? Mais il semble tout à fait C'ish, sauf pour le iostream. Thereore:

  • utilisation std::vector<int> de #include <vector> (ajouter des éléments à push_back par exemple)
  • passe comme une référence, à savoir void heapsort(std::vector<int> &a)
  • envisager d'utiliser std::swap(a[i], a[j]); au lieu de exch
+0

merci les gars j'ai résolu en utilisant votre aide, merci beaucoup –

4

Vous avez écrit un . au lieu d'un , entre les 9 et 20:

int a[]={12,3,5,1,67,10,9.20}; 

Il en résulte 7 chiffres, le dernier est le double 9.20 qui est converti en un int.

De plus, ce code est erroné:

void heapsort(int a[]){ 
    int n=sizeof(a)/sizeof(int); 

arguments de tableau sont en fait passés comme des pointeurs, donc sizeof(a) ne vous donnera pas le résultat correct. Vous devriez passer la taille du tableau comme paramètre supplémentaire à la place.

4

Un problème que je peux voir tout de suite est ici:

void heapsort(int a[]){ 
    int n=sizeof(a)/sizeof(int); 

Vous ne pouvez pas passer un tableau entier comme un paramètre à une fonction en C/C++. La syntaxe du paramètre int a[] est, bien sûr, source de confusion, mais en fait, elle est équivalente à int* a. heapsort() ne peut pas connaître la taille du tableau auquel a points. Vous devez passer la taille en tant que paramètre séparé.

+2

Ou utilisez 'std :: vector', car c'est du C++ ... – Griwes