нужно изменить сортировку по первому столбцу на сортировку по первой строке в матрице, но как?
Задание - "Реализовать функцию, которая будет изменять последовательность столбцов матрицы так, чтобы элементы их первой строки были отсортированы по возрастанию." Давно делалось и всё забылось. По ошибке получилось что код сортирует первый столбик по возрастанию, а не первую строку, ну и все остальные значения привязаны к своей строке. Нужно сделать сортировку по первой строке, менял разные значения, но никак не получается. Ощущение что чуть-чуть поменять цифры, переменные нужно, но где я не могу понять.. хелп плз..
#include <stdio.h>
#include <conio.h>
int main()
{
int i,j;
int m,n;
int x,y;
printf("\nВведите количество строк \n");
scanf("%d",&m);
printf("\nВведите количество столбцов \n");
scanf("%d",&n);
float A[m][n];
printf("\nВведите матрицу %d x %d elements \n",m,n);
for (i=0; i<m; i++)
{
printf("\n Строка %d : \n",i+1);
for (j=0; j<n; j++)
{
printf("Строка [%d][%d]",i+1,j+1);
scanf("%f", &A[i][j]);
}
}
printf("\nМатрица: \n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
{
printf("%f\t",A[i][j]);
}
printf("\n");
}
for(y=0; y<m; y++)
{
for (i=0; i<(m-1); i++)
{
if(A[i][0]>A[i+1][0])
{
for(j=0; j<n; j++)
{
x=A[i][j];
A[i][j]=A[i+1][j];
A[i+1][j]=x;
}
}
}
}
printf("\n");
printf("\nСортированная матрица: \n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
{
printf("%f\t",A[i][j]);
}
printf("\n");
}
printf("\n");
}
Ответы (1 шт):
У вас же количество столбцов n, и внешний цикла сортировки должен до n идти, а вот внутренние обмены столбцов между собой - до числа строк m
for(y=0; y<n; y++)
{
for (i=0; i<(n-1); i++)
{
if(A[i][0]>A[i+1][0])
{
for(j=0; j<m; j++)
{
x=A[j][i];
A[j][i]=A[j][i+1]
A[j][i+1]=x;
А чтобы такого избегать, называйте переменные осмысленно - rows или rowcount и т.д.