如何在c++中对二维数组进行排序
visual How to sort a 2D array in C++
我有5个学生的名字和他们3门课的成绩,我已经计算出他们3门课的平均分。然后我需要根据他们的数据(姓名,三门课程的成绩和平均成绩)从平均成绩最高的到最低的对他们进行排序。有人能告诉我我的代码有什么问题吗?这是我的代码…
# include <iostream>
# include <string>
# include <iomanip>
using namespace std;
void read(string names[],double grades[][4],int n);
void average(double grades[][4], int n);
void sort(string names[],double grades[][4], int n);
int main()
{
string names[5]; double grades[5][4];
cout<<fixed<<showpoint<<setprecision (2);
cout<<" please enter the names and grades(math,phy,cpp) for 5 studentsn";
read(names,grades,5);
average(grades,5);
sort(names,grades,5);
for(int rows=0; rows<5; rows++)
{
cout<<names[rows]<<"t";
for( int col=0; col<4; col++)
{
cout<<grades[rows][col]<<"t";
}
cout<<endl;
}
system("pause");
return 0;
}
void read(string names[],double grades[][4],int n)
{
for(int rows=0; rows<n; rows++)
{
cin>>names[rows];
for( int col=0; col<3; col++)
{
cin>>grades[rows][col];
}
}
system("cls");
}
void average(double grades[][4], int n)
{
double sum;
for(int rows=0; rows<n; rows++)
{
sum=0.0;
for(int col=0; col<3;col++)
{
sum=sum+grades[rows][col];
}
grades[rows][3]=sum/3;
}
}
void sort(string names[],double grades[][4], int n)
{
double temp;int end=n;string swap_names;
for(int rows=0; rows<end; rows++)
{
if(grades[rows][3]> grades[rows+1][3])
{
for(int col=0; col<4;col++)
{
temp=grades[rows+1][col];
grades[rows+1][col]=grades[rows][col];
grades[rows][col]=temp;
}
swap_names=names[rows+1];
names[rows+1]=names[rows];
names[rows]=swap_names;
}
}
}
谢谢。
问题是您的sort()
函数。冒泡排序是O(n2)排序,其中sort()
只需要O(n)时间,这是正确的。
尝试sort()
的更正代码,
void sort(string names[],double grades[][4], int n)
{
double temp;
int end=n;
string swap_names;
for(int rows1=0; rows1<end; rows1++)
{
for(int rows2=0; rows2<end; rows2++)
{
if(grades[rows1][3] < grades[rows2][3])
{
for(int i=0; i<4; i++)
{
temp=grades[rows1][i];
grades[rows1][i]=grades[rows2][i];
grades[rows2][i]=temp;
}
swap_names=names[rows1];
names[rows1]=names[rows2];
names[rows2]=swap_names;
}
}
}
}
您的排序算法尚未完成。这是所谓的冒泡排序算法的一次迭代,参见冒泡排序了解更多细节。然而冒泡排序确实有相当糟糕的性能,如果你的数据库很大,那么你真的应该考虑使用库中的排序,正如其中一个评论所建议的那样。
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序后如何将二维数组重置为原始形式
- 对角度二维数组进行排序
- 这是用于对二维数组进行排序的最佳方法
- 按一列对二维数组进行气泡排序
- 根据用户输入对二维数组进行排序和打印
- 对 C++ 中的二维数组进行排序
- 二维数组中的插入排序
- 在C++中对二维数组使用插入排序函数
- 如何在c++中对二维数组进行排序
- 如何在c/c中基于特定索引对二维数组进行排序
- 编写一个程序,使用冒泡排序对二维数组中的整数按升序排序
- 排序二维数组不触及第二次元
- C++中二维数组的冒泡排序
- 用C++对二维数组中的浮点数进行排序
- 如何按特定单元格对二维数组进行快速排序?