我是C++编程新手,我需要对这个矩阵进行排序:
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
int main(int argc, char** argv) {
Mat10 a;
fillRand(a, 5, 5);
prnMat(a, 5, 5);
cout << endl;
return 0;
}
void fillRand(Mat10 m, int n, int k) {
for (int i = 0; i < n; i++)
for (int j = 0; j < k; j++)
m[i][j] = rand() % 1000;
}
void prnMat(Mat10 a, int m, int n) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++)
cout << setw(8) << a[i][j];
cout << endl;
}
}
我需要从头开始对矩阵进行排序。最小值必须在第一列的开头。下一个必须在它的下面,以此类推。结果必须是排序矩阵-最小值必须在左列的开头-最大值必须在矩阵的结尾。请你帮忙解决这个问题好吗?
编辑
也许我找到了解决办法
void sort(int pin[10][2], int n)
{
int y,d;
for(int i=0;i<n-1;i++)
{
for(int j=0; j<n-1-i; j++)
{
if(pin[j+1][1] < pin[j][1]) // swap the elements depending on the second row if the next value is smaller
{
y = pin[j][1];
pin[j][1] = pin[j+1][1];
pin[j+1][1] = y;
d = pin[j][0];
pin[j][0] = pin[j+1][0];
pin[j+1][0] = d;
}
else if(pin[j+1][1] == pin[j][1]) // else if the two elements are equal, sort them depending on the first row
{
if(pin[j+1][0] < pin[j][0])
{
y = pin[j][1];
pin[j][1] = pin[j+1][1];
pin[j+1][1] = y;
d = pin[j][0];
pin[j][0] = pin[j+1][0];
pin[j+1][0] = d;
}
}
}
}
}
但由于我是编程新手,我不明白这是解决方案吗?
3条答案
按热度按时间laawzig21#
下面是一个简单的例子:
此后,矩阵将按 * 行 * 排序:
如果要按 cols 排序:
您需要将 * 仅最后一个周期 * 中的
matrix[i][j]
替换为matrix[j][i]
如果你需要了解sort()函数,你可以做here希望这能有所帮助。
kx7yvsdv2#
您只需在数组上调用std::sort:
6yt4nkrj3#
给定矩阵B(n x n),编写一个程序,按升序排列矩阵中的元素。输入数据格式:第一行输入n,不超过100。接下来,引入矩阵的元素。输出数据格式:以矩阵的形式输出问题的答案:用换行符分隔行,用空格分隔行中的元素。
输入格式4 5 7 2 3 4 4 6 2 9 5 3 11 1 7 0 10
输出格式0 1 2 2 3 3 4 4 5 5 6 7 7 9 10 11