Langage C: tri d'une matrice

Fermé
Amal OA Messages postés 9 Date d'inscription lundi 24 octobre 2011 Statut Membre Dernière intervention 20 novembre 2011 - Modifié par Amal OA le 15/11/2011 à 23:10
Amal OA Messages postés 9 Date d'inscription lundi 24 octobre 2011 Statut Membre Dernière intervention 20 novembre 2011 - 20 nov. 2011 à 23:34
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 vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
16 nov. 2011 à 14:14
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 lundi 24 octobre 2011 Statut Membre Dernière intervention 20 novembre 2011
20 nov. 2011 à 23:34
ca marche, merci
0