2013-06-14 9 views
1

J'ai 2 tableaux un tableau est constitué des étudiants et un second tableau consiste en des notes aléatoires générées pour ces étudiants. Comment puis-je écrire ces tableaux afin que je puisse utiliser le tri à bulles pour trier ces tableaux dans l'ordre décroissant des notes?Mise en œuvre des tableaux en C++

students[i] = i # 0f students 
Grade1[i] = rand()%91+10 ; // score for exam 1,I did not write the loop which generates random numbers 

Comment puis-je mettre ces deux ensemble donc je peux trier en référençant grades .. et en allant du plus haut au plus bas niveaux

+0

Suggestion: Simplifier la question en supprimant toutes les références aux sources de données aléatoires. Vous souhaitez combiner deux tableaux en un pour trier les valeurs d'un, en utilisant les valeurs de l'autre comme clé. Pour cela, peu importe que le contenu des tableaux soit aléatoire. – jogojapan

+0

... Devine que les devoirs sont dus ?! –

+1

@BaidNation Votre édition a changé de manière spectaculaire la signification de votre question - comme cette version est, rien ne suggère que vous voulez trier un vecteur par les valeurs de l'autre (comme c'était le cas à l'origine). Je pense que vous voudrez peut-être revoir et réviser à nouveau. – tmpearce

Répondre

1

Je suppose que vous voulez mettre 2 single-Dimensional arrays avec N éléments chacun dans un 2D array avec N lignes et 2 Colonnes, le code suivant peut être utile.

int arr[100][2]; 

cout<<"\n Enter the Number of students: "; 
cin>>n; 

for(int i=0; i<n; i++) 
{ 
    arr[i][0]=students[i]; 
    arr[i][1]=Grade1[i]; 
} 

// Now use bubble sort to sort the second column of array arr 

for(int i=0; i<n; i++) 
{ 
    for(int j=i; j<n; j++) 
    { 
     if(arr[i][1] < arr[j][1]) 
     { 
     int t1; 
     t1=arr[i][1]; 
     arr[i][1]=arr[j][1]; 
     arr[j][1]=t1; 
     t1=arr[i][0]; 
     arr[i][0]=arr[j][0]; 
     arr[j][0]=t1; 

     }  
    } 
} 
1

Commencez par une implémentation simple de tri à bulles (par exemple: take a look at pseudocode available on Wikipedia), puis utilisez grade étudiant pour comparer la commande

Votre étudiant peut stocker et de qualité dans le tableau comme celui-ci. n-ième élément du tableau de qualité représentent qualité pour n-ième étudiant

int studentIds[10]; 
int grade[10]; 

Et sur votre tri à bulles, utilisez condition similaire comme suit pour comparer les élèves en fonction de sa/son grade

// iterate students using two indices i & j 
... 
if(grade[i] < grade[j]) { 
    // .. bubble element i to the right 
} 
... 
1

Si vous peut utiliser des outils C++ modernes comme std::vector et d'autres affaires comme std::sort (qui trie un std::vector), ce serait beaucoup plus propre que de le faire vous-même avec des tableaux bruts. Apprendre à utiliser les classes de conteneur et les algorithmes intégrés de la langue vous sera très utile.

#include <vector> 
#include <algorithm> 
#include <iostream> 
struct Student //structure to hold student ID and grade info 
{ 
    Student(int id, int grade):id(id),grade(grade){} 
    int id; 
    int grade; 
}; 
//comparison operator to use with std::sort 
bool operator <(const Student& lhs, const Student& rhs) 
{ 
    return lhs.grade < rhs.grade; 
} 
int main() 
{ 
    //You are starting with raw arrays... 
    int studentID[5]{1,2,3,4,5}; 
    int grade[5]{90,91,73,62,87}; 

    //convert to std::vector of Student objects 
    //not safe indexing into raw array, just an example 
    std::vector<Student> students; 
    for(unsigned int i=0;i<5;++i){ 
     students.push_back(Student(studentID[i],grade[i]));} 

    //sort the vector (using the less-than operator provided above) 
    std::sort(students.begin(),students.end()); 
    //reverse the vector, making it high-to-low order 
    std::reverse(students.begin(),students.end()); 

    //print the result (uses std::for_each with a lambda function) 
    std::for_each(students.begin(),students.end(), 
    [](Student s){std::cout<<"ID: "<<s.id<<" grade: "<<s.grade<<std::endl;}); 
} 

Sortie:

ID: 2 grade: 91 
ID: 1 grade: 90 
ID: 5 grade: 87 
ID: 3 grade: 73 
ID: 4 grade: 62 
+0

que se passe-t-il si vous avez un tableau généré comme ceci .. studentid = rand()% 31 + 131; – BaidNation

+0

et grades dans le même respect entre 10 et 100; – BaidNation

+0

grades = rand()% 91 + 10 – BaidNation