Отсортировать методом обмена четные столбцы матрицы по возрастанию, нечетные - по убыванию
Нужно отсортировать методом обмена четные столбцы матрицы по возрастанию, нечетные - по убыванию. Этот код не работает, заменяя все элементы столбца последним элементом. Не могу найти, где ошибка в алгоритме.
#include <stdio.h>
#include <stdlib.h>
int main() {
int t=0;
int N=0;
int A[N][N];
do{ printf("Введите длинну рядка и столбца:\n");
scanf("%d", &N);
}while(N<1 || N>50);
for(int i=0; i<N; i++){
printf("\n");
for(int j=0; j<N; j++){
A[i][j] = rand() % 100;
printf("\t%2.0d", A[i][j]);
}}
for(int j=0;j<N;j++){
if (j%2==1){
for(int k=N-1;k>0;k--){
for(int i=0;i<k;i++){
if(A[i][j]<A[i+1][j]){
t=A[i][j];
A[i][j]=A[i+1][j];
A[i+1][j]=t;
}
}
}}
if (j%2==0){
for(int k=N-1;k>0;k--){
for(int i=0;i<k;i++){
if(A[i][j]>A[i+1][j]){
t=A[i][j];
A[i][j]=A[i+1][j];
A[i+1][j]=t;
}
}
}
}}
printf("\n");
for(int i=0; i<N; i++){
printf("\n");
for(int j=0; j<N; j++){
printf("\t%2.0d", A[i][j]);
}}
}
Ответы (1 шт):
Вы выделяете память неверно (а еще используете неверный спецификатор, но тут позже) -
int N=0;
int A[N][N];
В лучшем случае вы попытались выделить массив нулевого размера. Как совет - или используйте массив, скажем, int A[50][50] - у вас это предельный размер, или перенесите объявление массива как есть (раз ваш компилятор позволяет VLA) в строку после ввода N
} while(N<1 || N>50);
int A[N][N];
или выделяйте его динамически (см., например, тут). Все будет работать.
И еще - вы работаете с целыми числами, а для них указывать .0 в спецификаторе вывода
printf("\t%2.0d", A[i][j]);
просто бессмысленно. Достаточно %2d.
Еще, не сочтите за вредность, но по-русски - "по возрастанию", "по убыванию" или "в порядке возрастания/убывания".