我想在c ++中编写一个交换行的程序,但我的代码只对数组的元素进行排序。 例如: 我做了一个3 * 5的数组。 我按如下方式输入数据
1 2 3 4 10
5 6 7 8 26
9 1 2 3 15
现在我想按升序交换行取决于最后一列.i.e。
5 6 7 8 26
9 1 2 3 15
1 2 3 4 10
我的代码仅将行表单从左到右排序。
int arr[3][5], sum, temp;
for(int i =0; i<3; i++)
{
sum=0;
for(int j =0; j<4; j++)
{
cout << "Enter "<<j+1<<" Number of "<<i+1<<" Student";
cin >> arr[i][j];
sum = sum + arr[i][j];
}
arr[i][4]=sum;
}
for(int i = 0; i<3; i++)
{
for(int j = 0; j<5; j++)
{
cout << arr[i][j]<<"\t";
}
cout << endl;
}
cout<<"----------------"<<endl;
for(int i=0;i<3;i++)
{
for(int j = 0;j<4;j++)
{
for(int k =0;k<4;k++)
{
if(arr[i][j]<arr[i][k])
{
temp=arr[i][j];
arr[i][j]=arr[i][k];
arr[i][k]=temp;
}
}
}
}
for(int i =0;i<3;i++)
{
for(int j =0;j<5;j++)
{
cout<<arr[i][j]<<"\t";
}
cout<<endl;
}
答案 0 :(得分:0)
如果性能不是很重要,请使用与冒泡排序相同的想法。
比较每对行之间的最后一列元素,如果不是为了交换行。这可以通过循环和临时变量来完成。
if(matrix[i][cols-1] > matrix[j][cols-1])
{
int temp ;
for(int k = 0; k < cols; ++k)
{
temp = matrix[i][k] ;
matrix[i][k] = matrix[j][k] ;
matrix[j][k] = temp ;
}
}
由于您使用的是C ++,如果您的矩阵具有固定大小的行和列,则可以使用std::array
。即。
std::array<std::array<int, colums>, rows> matrix ;
Here是一个使用std::swap
进行行交换的工作示例。排序例程基本上是冒泡排序。
for(int i = 0; i < rows; ++i)
for(int j = 0; j < i; ++j)
if(matrix[j][cols-1] > matrix[i][cols-1])
std::swap(matrix[i], matrix[j]);
答案 1 :(得分:0)
也许这是你的答案:
int arr[3][5], sum, temp;
for (int i = 0; i<3; i++)
{
sum = 0;
for (int j = 0; j<4; j++)
{
cout << "Enter " << j + 1 << " Number of " << i + 1 << " Student";
cin >> arr[i][j];
sum = sum + arr[i][j];
}
arr[i][4] = sum;
}
cout << endl << endl;
for (int i = 0; i<3; i++)
{
for (int j = 0; j<5; j++)
{
cout << arr[i][j] << "\t";
}
cout << endl;
}
cout << "----------------" << endl << endl;
int tmp[5],i,j,k;
for ( i = 0; i<3; i++)
{
for ( j = 0; j<3; j++)
{
if (arr[j][4]<arr[i][4])
{
for ( k = 0; k <= 4; k++){
int t = arr[i][k];
arr[i][k] = arr[j][k];
arr[j][k] = t;
}
}
}
}
for (int i = 0; i<3; i++)
{
for (int j = 0; j<5; j++)
{
cout << arr[i][j] << "\t";
}
cout << endl;
}