#include <stdio.h>
#include <stdlib.h>

int alocaMatriz(int ***matriz, int lin, int col)  //agora com ponteiro para int**
{
    int i;

    *matriz=malloc(lin*sizeof(int*)); //com * alterar o valor apontado

    for(i=0; i<col; i++)
    {
        (*matriz)[i]=(int*)malloc(col*sizeof(int)); //aqui também
    }
    return 0;
}

void leMatriz(int **matriz, int lin, int col)
{
    int i, j;

    printf("\nDigite os valores: ");

    for(i=0; i<lin; i++)
    {
        for(j=0; j<col; j++)
        {
            scanf("%d", &matriz[i][j]);
        }
    }
}

void mostraMatriz(int **matriz, int lin, int col)
{
    int i, j;

    for(i=0; i<lin; i++)
    {
        for(j=0; j<col; j++)
        {
            printf("%d", matriz[i][j]);
        }
        printf("\n");
    }
}

int ordenaMatriz(int **matriz, int lin, int col)
{

    int i, j, menor, cont=0, indice;
	int vetor[lin*col]; 
	
	for(i=0;i<lin;i++){
	    for(j=0;j<col;j++){
	        vetor[cont]=matriz[i][j];
	        cont++;
	    }
	}
	
	for(i=0;i<(lin*col);i++){
	    printf("%d ", vetor[i]);
	}
	for(i=0;i<lin*col;i++){
	    menor=vetor[i];
	    for(j=0;j<lin*col;j++){
	        if(vetor[j]<menor){
	            menor=vetor[j];
	            int aux = vetor[i];
	            vetor[i] = menor;
	            vetor[j] = aux;
	        }
	    }
	}
	for(i=0, cont = 0;i<lin;i++){
	    for(j=0;j<col;j++){
	        matriz[i][j]=vetor[cont];
	        cont++;
	    }
	}

}

int main(int argc, char** argv)
{
    int lin, col, i;
    int **matriz;

    printf("Digite as dimensoes da matriz: ");
    scanf("%d %d", &lin, &col);

    alocaMatriz(&matriz, lin, col);
    leMatriz(matriz, lin, col);
    mostraMatriz(matriz, lin, col);
    ordenaMatriz(matriz, lin, col);
    printf("\n\nMatriz ordenada:\n\n");
    mostraMatriz(matriz, lin, col);
    //desalocaMatriz(&*matriz, lin, col);

    return 0;
}
