Langage C: tri d'une matrice

Amal OA Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
Amal OA Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,


je veux avoir toutes les lignes et les colonnes d'une matrice donnée triées par ordre croissant
voila mon essai qui est basé sur le tri ligne par ligne puis colonne par colonne jusqu'à obtenir le résultat voulu:


#include<stdio.h>
main()
{int i,j,k,l,n,b1,b2,b,min;

do
{printf("donnerla dimension de votre matrice carré");
scanf("%d",n);
}
while(n<=0);

float M[n][n];

for(i=0;i<n-1;i++)
for(j=0;j<n-1;j++)
{
printf("donner M[%d][%d]",i,j);
scanf("%f",M[i][j]);
}
for(i=0;i<=n-1;i++)
for(j=0;j<n-1;j++)
{
if(M[i][j]<M[i][j+1])
b1=1;
}
for(j=0;j<=n-1;j++)
for(i=0;i<n-1;i++)
{
if(M[i][j]<M[i+1][j] )
b2=1;
}
if((b1==1)&&(b2==1))
b=1;

do
for(i=0;i<=n-1;i++)
for(k=0;k<n-1;k++)
{
min=M[i][k];
for(l=k+1;l<n-1;l++)
{
if(M[i][l]<=min)
min=M[i][k];
}
}
for(j=0;j<=n-1;j++)
for(k=0;k<n-1;k++)
{
min=M[k][j];
for(l=k+1;l<n-1;l++)
{
if(M[l][j]<=min)
min=M[k][j];
}
}
while(b!=1)
return(0);
}



bien sur cet algorithme n'a pas marché , aidez moi svp à trouver mes fautes.
A voir également:

1 réponse

Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
Bonjour, en faisant le tri de la matrice dans un tableau à une dimension ça donne le résultat voulu testé avec qsort :
#include <stdio.h>
#include <stdlib.h>

void cc(int **m,int *tmp,int d)
  {/* copy tmp dans m */
    int i,j,o;
    for(o=i=0;i<d;i++){
        for(j=0;j<d;j++){
            m[i][j]=tmp[o];
            o++;
            printf("%d ",m[i][j]);
        }printf("\n");
    }
  }
int comp(const void *a,const void *b){
    return (*(const int*)a-*(const int*)b);
}
int main(void)
  {
    int i,**m,tmp[16]={4,2,6,7,0,3,8,1,9,3,5,9,6,4,7,0};
    m=malloc(sizeof(int*)*4);
    for(i=0;i<4;i++)m[i]=malloc(sizeof(int)*4);
    printf("avant\n");
    cc(m,tmp,4);

    qsort(tmp,16,sizeof(int),comp);
    printf("apres\n");
    cc(m,tmp,4);

    for(i=0;i<4;i++)free(m[i]);
    free(m);
    return 0;
  }
Résultat :
avant
4 2 6 7
0 3 8 1
9 3 5 9
6 4 7 0
apres
0 0 1 2
3 3 4 4
5 6 6 7
7 8 9 9
1
Amal OA Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
ca marche, merci
0