Упорядочить строки массива по возрастанию суммы элементов каждой строки - C (СИ)
Формулировка задачи:
Помогите пожалуйста. Мне нужно упорядочить строки массивы по возрастанию сумм элементов каждой строки. То что я сделал находится ниже. Немного опишу. Задаю произвольную матрицу. Нахожу сумму в каждой строке и присваиваю это значение одномерному массивы B. Как мне теперь упорядочить строки двумерного массива? Прощу объяснить, а не скопировать откуда-нибудь неизвестно что. Буду очень признателен.
#pragma hdrstop
#pragma argsused
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int n,m,i,j,max=0;
printf("Введите размер массива");
scanf ("%i %i", &n , &m);
float **A = new float*[n], k;
for (i = 0; i < n; i++)
A[i] = new float [m];
printf ("Введите матрицу A\n");
for (int i=0; i < n; i++)
{
for (int j=0; j<m;j++)
{
gotoxy(5 + j*5,5+i);
scanf("%f", &A[i][j]);
}
}
float *B;
B=new float[n];
for (i = 0; i < n; i++) {
for (j = 0;j <= m; j++)
k +=A[i][j];
printf ("Сумма строки = %f\t" , k);
B[n]=k;
k=0;
printf ("Элемент массива B %f\n", B[n]);
}
getch();
return 0;
}Решение задачи: «Упорядочить строки массива по возрастанию суммы элементов каждой строки»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
float sum(float * mas, int m){
float sum = 0;
for (int i = 0; i < m; i++){
sum += mas[i];
}
return sum;
}
int main(){
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int n, m, i, j, max = 0;
printf("Введите размер массива: ");
scanf("%i %i", &n, &m);
float **A = new float*[n], k;
for (i = 0; i < n; i++)
A[i] = new float[m];
printf("Введите матрицу A\n");
for (int i = 0; i < n; i++){
for (int j = 0; j<m; j++){
printf("[%i][%i] = ", i, j);
scanf("%f", &A[i][j]);
}
}
float * a = new float[m];
for (int i = 0; i < n; i++) { // i - номер прохода
for (int j = n - 1; j > i; j--){ // внутренний цикл прохода
if (sum(A[j - 1], m) > sum(A[j], m)) {
a = A[j - 1];
A[j - 1] = A[j];
A[j] = a;
}
}
}
for (int i = 0; i < n; i++){
for (int j = 0; j<m; j++){
printf("[%i][%i] = %f\n", i, j, A[i][j]);
}
}
_getch();
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется функция sum, которая суммирует элементы строки массива
- Определяется главная функция main, которая запрашивает размер массива и заполняет его значениями
- Создается двумерный массив типа float** и инициализируется динамическим выделением памяти
- Внутренними циклами заполняется массив A
- Создается одномерный массив типа float* и инициализируется динамическим выделением памяти
- Внутренними циклами происходит перестановка строк массива A в порядке возрастания суммы элементов каждой строки
- Выводится отсортированный массив A
- Программа ожидает нажатия клавиши для завершения работы
- Программа завершается возвратом 0 из функции main