排序多维数组在C ++
问题描述:
我在编程初学者,我有一个问题。
我要创建二维数组[5] [3] ...
让我们说,这是例子的这一部分:
I am beginner in programming, and I have a problem. I have to create two dimensional array [5][3] ... Lets says this is example of part of this:
- 2 3 4
- 7 8 9
- 5 6 7
然后我得行之和它旁边写这样的:
Then I have to get sum of lines and write it next to this :
- 2 3 4 9
- 7 8 9 24
- 5 6 7 18
现在,我要通过这一笔数组进行排序,因此结果是这样的:
Now, I have to sort arrays by this sum, so the result would look like this:
- 7 8 9 24
- 5 6 7 18
- 2 3 4 9
我不知道如何做到这一点,这是我的code:
I dont know how to achieve this, this is my code:
#include <iostream>
#include <time.h>
using namespace std;
void tocke(int polje[5][3])
{
int vsota;
srand(time(NULL));
int sums[5];
for (int i = 0; i < 5; i++)
{
vsota = 0;
cout << endl;
cout << i + 1 << ". ";
for (int j = 0; j < 3; j++){
polje[i][j] = (rand() % 10 + 1);
vsota += polje[i][j];
sums[i] = vsota;
cout << polje[i][j] << " ";
}
}
}
void urejaj(int polje[5][3])
{
cout << "\n\n\n\n" << endl;
int sums[5];
int vsota ;
double temp;
for (int i = 0; i < 5; i++)
{
vsota = 0;
cout << endl;
cout << i + 1 << ". ";
for (int j = 0; j < 3; j++)
{
vsota += polje[i][j];
sums[i] = vsota;
if (sums[i] < sums[i+1])
{
temp = polje[i][j];
polje[i][j] = polje[i + 1][j];
polje[i + 1][j] = temp;
}
cout << polje[i][j] << " ";
}cout << sums[i];
}
}
int main()
{
int polje[5][3];
tocke(polje);
urejaj(polje);
cout << "\n";
system("pause");
return 0;
}
第一功能在字段写入元件,和所述第二有字段进行排序
First function writes elements in field, and the second has to sort fields.
答
在情况下,你还是输了,下面是完整的程序:
In case you're still lost, here's the full program:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;
void display_matrix(int**, int, int);
void gen_matrix(int**, int, int);
void gen_matrix_sum(int**, int**, int, int);
void sort_matrix(int**, int**, int, int);
int main()
{
srand(time(0));
int m=5, n=3;
int** my_matrix = (int**)malloc(m*sizeof(int*));
for (int i=0; i<m; i++) my_matrix[i] = (int*)malloc(n*sizeof(int));
gen_matrix(my_matrix, m, n);
display_matrix(my_matrix, m, n);
cout << endl;
int** my_matrix_sum = (int**)malloc(m*sizeof(int*));
for (int i=0; i<m; i++) my_matrix_sum[i] = (int*)malloc((n+1)*sizeof(int));
gen_matrix_sum(my_matrix_sum, my_matrix, m, n);
display_matrix(my_matrix_sum, m, n+1);
cout << endl;
int** my_matrix_sorted = (int**)malloc(m*sizeof(int*));
for (int i=0; i<m; i++) my_matrix_sorted[i] = (int*)malloc((n+1)*sizeof(int));
sort_matrix(my_matrix_sorted, my_matrix_sum, m, n);
display_matrix(my_matrix_sorted, m, n+1);
cout << endl;
}
void display_matrix(int** my_matrix, int m, int n)
{
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
cout << setw(2) << my_matrix[i][j] << " ";
cout << endl;
}
}
void gen_matrix(int** M, int m, int n)
{
int random_limit = 10;
for (int i=0; i<m; i++)
for (int j=0; j<n; j++)
M[i][j] = rand()%random_limit + 1;
}
void gen_matrix_sum(int** M, int** my_matrix, int m, int n)
{
int aux[m];
for (int i=0; i<m; i++)
aux[i] = 0;
for (int i=0; i<m; i++)
for (int j=0; j<n; j++)
{
M[i][j] = my_matrix[i][j];
aux[i] += M[i][j];
}
for (int i=0; i<m; i++)
M[i][n] = aux[i];
}
void sort_matrix(int** my_matrix_sorted, int** my_matrix, int m, int n)
{
int v_sum_values[m];
for (int i=0; i<m; i++)
v_sum_values[i] = my_matrix[i][n];
int v[n];
int max = v_sum_values[0];
int index;
for (int i=0; i<m; i++)
{
for (int j=0; j<m; j++)
{
if (v_sum_values[j]>max)
{
max = v_sum_values[j];
index = j;
}
}
v_sum_values[index] = -1;
v[i] = index;
max = v_sum_values[i];
}
for (int i=0; i<m; i++)
for (int j=0; j<n+1; j++)
my_matrix_sorted[i][j] = my_matrix[v[i]][j];
}