求教C++关于数字排序的题目!

来源:百度知道 编辑:UC知道 时间:2024/05/24 19:07:58
已知n个学生的注册号和成绩,计算他们的平均成绩,并列出成绩最好的前t名学生的注册号和分数。
程序代码如下:
// program 3_1.cpp
#include<iostream.h>
void main()
{
const int n=3;
const int t=n;
int index[n];
float score[n];
for(int i=0;i<n;i++)
cin>>index[i]>>score[i];
float sum=0;
for(i=0;i<n;i++)
sum+=score[i];
cout.precision(2);
cout<<endl<<"Average score:"<<sum/n;
cout.width(28);
cout<<endl<<" register number score";
for(i=0;i<t;i++) //A选取前t名分数最高的学生,输出其注册号和成绩
{
float s=score[i];
int j1=i;
for(int j=i+1;j<n;j++)
if(s<score[j])
{
s=score[j];
j1=j;
}
if(j1>i)
{
score[j1]=score[i];
score[i]=s;
j=index[j1];
index[j1]=index[i];
index[i]=j;
}
cout.width(4);
cout<<endl<<i+1;
cout.width(11);

for(i=0;i<t;i++) //外循环,排序。
{
float s=score[i];
int j1=i;
for(int j=i+1;j<n;j++) //(内循环,找出score【i】到score【n】
if(s<score[j]) 中最大的数组元素 并将值赋给s)
{
s=score[j];
j1=j;
}
if(j1>i) //(j1>i,即上面的if语句被执行到。即score【i+1】
{ 到score【n】有比score【i】小的元素。
score[j1]=score[i]; //所以将score【i】和score[j1】的值交换。
score[i]=s; (外层循环中,i不断加1,最终数组元素从大
j=index[j1]; 到小排列。)
index[j1]=index[i]; //同时,成绩对应的学生编号也要交换。
index[i]=j; 不然搞错学生成绩。
}
cout.width(4); //两层循环后,元素已经由大到小排列。下面便
cout<<endl<<i+1; 是输出排前的学生的成绩和学好啦
cout.width(11);
cout<<index[i];
cout.width(16);
cout.precision(2);
cout<<score[i];
}
cout<<endl;
}
上面用的是选择排序法,就是每一次都从数组中分别找出最小的。然后赋给第一个元素,然后求第一个后面的最小值赋给第二个元素。以此类推,
最终将数据按大到小或小到大排序。
我也是新手啊。^_^。。
可能写得不够详细哈,
把原程序