Salve, potreste dirmi dove è che sbaglio, devo mettere in ordine crescente le righe positive, mentre quelle negative in ordine decrescente, fin quando leggo dal file 3x3 mi funziona e ordina come deve, mentre se aumento ad esempio 4x4 mi sballa tutto. 
int main()
{
   int mat[N][N];
   int riga;
   int colonna;
   struct my_struct vettore[N];
   lettura(mat, &riga, &colonna);
   stampa(mat, riga, colonna);
   ordina(mat, riga, colonna);
   diagonale (vettore, mat, riga, colonna);
}
void lettura (int mat[][N], int *riga, int*colonna){
    FILE*fp=fopen("input.txt", "r");
    int r, c;
    fscanf(fp,"%d", &r);
    fscanf(fp,"%d", &c);
printf("%d %d\n", r, c);
    *riga=r;
    *colonna=c;
    for (int i=0; i<r; i++){
         for (int j=0; j<c; j++){
            fscanf(fp,"%d", &mat[i][j]);
         }
    }
    fclose(fp);
}
void stampa(int mat[][N], int riga, int colonna){
        for (int i=0; i<riga; i++){
         for (int j=0; j<colonna; j++){
            printf("%d ", mat[i][j]);
         }
         printf("\n");
    }
}
void ordina(int mat[][N], int riga, int colonna){
   int  temp=0;
   int  min=0;
    for (int i=0; i<riga; i++){
         for (int j=0; j<colonna-1; j++){
           if (i%2==0){
                if(mat[i][j]>mat[i][j+1]){
                    temp=mat[i][j];
                    mat[i][j]=mat[i][j+1];
                    mat[i][j+1]=temp;
                }
          }
           if (i%2!=0){
           if (mat[i][j]<mat[i][j+1]){
                    temp=mat[i][j];
                    mat[i][j]=mat[i][j+1];
                    mat[i][j+1]=temp;
                }
       }
    }
    }
printf ("\n");
     for (int i=0; i<=riga-1; i++){
         for (int j=0; j<colonna; j++){
                printf("%d ", mat[i][j]);
}
printf ("\n");
}
}