2012-09-27 5 views
0

C'est ma fonction:Sélection trier par ordre croissant

int main() { 
    double data[100]; 

    int num; 

    cout<<"num= "; 
    cin>>num; 

    for(int i = 1; i <= num; i++) { 
     cout<<i<<" element = "; 
     cin>>data[i]; 
    } 

    Sort(data, num); 

    for (int i = 1; i <= num; i++) { 
     cout<<data[i]<<endl; 
    } 

    return 0; 
} 

void Sort(double data[], int n) { 
    int i,j,k; 
    double min; 

    for(i = 0; i < n-1; i++) { 
     k = i; 
     min = data[k]; 

     for(j = i+1; j < n; j++) 
      if(data[j] < min) { 
       k = j; 
       min = data[k]; 
      } 
     data[k] = data[i]; 
     data[i] = min; 
    } 
} 

si j'écris pour exp. trois éléments: 8,9,1 à nouveau cout 8,9,1?

+2

Avez-vous parcouru votre code pour voir ce qui se passait? – Borgleader

Répondre

1
for(int i = 1; i <= num; i++) { // WRONG 

Je pense que vous voulez dire:

for(int i = 0; i < num; i++) { // RIGHT 

Les tableaux en C sont 0 indexées rappeler.

1

Votre fonction de tri est correcte. Le seul problème est que vous entrez des éléments aux positions 1 à n, tandis que vous devez utiliser 0 à n-1, inclusivement, dans les deux boucles de la fonction main().

Si vous avez besoin d'imprimer les numéros 1 par n, utilisez

cout<<(i+1)<<" element = "; 
1

Vous devriez obtenir utilisé de l'index 0 commencer dans la boucle for(int i = 0; i < N; ++i)

donc la fixation de ces deux erreurs d'index feront de votre le code fonctionne correctement.

la raison est:

si vous écrivez des données à data[] en utilisant 1 comme le début, votre premier article sera un nombre aléatoire de tableau de données:

si vous insérez 3 éléments, le tableau sera comme ceci:

data[0] = ??? // maybe a very very big number 
data[1] = 8 
data[2] = 9 
data[3] = 1 

et dans votre fonction de tri, l'index commence à 0 et se termine avant num, cela signifie que votre code renverrait ne sorte data[0], data[1], data[2].

si vous utilisez: num = 3, 3 2 1 vos données d'entrée pour le code d'origine vous pouvez voir que 3 et 2 est trié

Je suppose que votre code de tri est googlé quelque part, s'il vous plaît essayer de comprendre il.

bon cours de l'algorithme en ligne: https://www.coursera.org/course/algs4partI

un très bon algorithme Réservation en ligne: http://algs4.cs.princeton.edu/home/

BTW, for(j = i+1; j < n; j++) dans la fonction Sort serait mieux si elle a {} accolades.

Questions connexes