排序2D数组行取决于最后一列

时间:2015-03-11 16:05:12

标签: c++ arrays sorting multidimensional-array

我想在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;
}

2 个答案:

答案 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;
}