Premessa: dal punto di vista dell' efficienza fa veramente schifo ma almeno funziona:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*costanti della dimensione della matrice*/
#define X 3
#define Y 4
/*matrice di interi*/
int matrix[X][Y];
/*prototipi delle funizoni*/
void initialize();
void print();
void order();
/*compilo la matrice con valori casuali*/
void initialize() {
int i, j;
srand(time(NULL));
for(i = 0; i < X; i++) {
for(j = 0; j < Y; j++) {
matrix[i][j] = rand() % 99;
}
}
}
/*stampo la matrice*/
void print() {
int i, j;
printf("\n\n");
for(i = 0; i < X; i++) {
for(j = 0; j < Y; j++) {
printf("[%d]", matrix[i][j]);
}
printf("\n");
}
printf("\n\n");
}
void order() {
int i, j, k = 0, max, temp;
int tempArray[X*Y];
/*trasformo la matrice in un array*/
for(i = 0; i < X; i++) {
for(j = 0; j < Y; j++) {
tempArray[k] = matrix[i][j];
k++;
}
}
/*stampo l' array così ottenuto*/
for(i = 0; i < X*Y; i++) printf("[%d]", tempArray[i]);
printf("\n");
/*ordino l' array*/
for(i = 0; i < (X*Y-1); i++) {
max = tempArray[i];
for(j = (i+1); j < Y*X; j++) {
if(tempArray[j] > max) {
max = tempArray[j];
temp = j;
}
}
tempArray[temp] = tempArray[i];
tempArray[i] = max;
}
/*stampo l' array ordinato*/
for(i = 0; i < X*Y; i++) printf("[%d]", tempArray[i]);
printf("\n");
/*ricompongo la matrice*/
i = 0; j = 0;
for(k = 0; k < X*Y; k++) {
matrix[i][j] = tempArray[k];
j++;
if(j >= Y) {
i++;
j = 0;
}
}
}
/*inizio programma*/
int main() {
initialize();
print();
order();
print();
return 0;
}