我有 2 个数组,一个数组包含学生,第二个数组包含为这些学生生成的随机成绩。如何编写这些数组,以便可以使用冒泡排序按成绩降序对这些数组进行排序?
students[i] = i # 0f students
Grade1[i] = rand()%91+10 ; // score for exam 1,I did not write the loop which generates random numbers
我怎样才能把这两个放在一起所以我可以通过参考成绩进行排序..从最高到最低
我有 2 个数组,一个数组包含学生,第二个数组包含为这些学生生成的随机成绩。如何编写这些数组,以便可以使用冒泡排序按成绩降序对这些数组进行排序?
students[i] = i # 0f students
Grade1[i] = rand()%91+10 ; // score for exam 1,I did not write the loop which generates random numbers
我怎样才能把这两个放在一起所以我可以通过参考成绩进行排序..从最高到最低
我想你想把 2 个single-Dimensional arrays
元素N
放入一个2D array
带有N
行和2
列的元素中,那么下面的代码可能会有用。
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;
}
}
}
从冒泡排序的简单实现开始(例如:查看 Wikipedia 上提供的伪代码),然后使用学生成绩来比较排序
您可以像这样将学生和成绩存储在数组中。成绩数组的第 n 个元素表示第 n 个学生的成绩
int studentIds[10];
int grade[10];
在您的冒泡排序中,使用类似于以下的条件来根据学生的成绩比较学生
// iterate students using two indices i & j
...
if(grade[i] < grade[j]) {
// .. bubble element i to the right
}
...
如果您可以使用现代 c++ 工具std::vector
和其他很酷的业务std::sort
(对 进行排序std::vector
),那么它比使用原始数组自己做要干净得多。学习使用容器类和语言的内置算法将为您提供很好的服务。
#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;});
}
输出:
ID: 2 grade: 91
ID: 1 grade: 90
ID: 5 grade: 87
ID: 3 grade: 73
ID: 4 grade: 62