Comment trier une matrice

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 319 fois - Téléchargée 21 fois

Contenu du snippet

Howdy ;
On a toujours pensé à trier les tableaux, les listes chainées et les files : trions les matrices alors !
Je serais heureux de recevoir vos critiques constructives.
Thanks.

Source / Exemple :

// This program is done
         // Billal Begueradj
         // Bejaia Univerity.
         // Regards

  #include<stdio.h>
  #include<conio.h>
  #include<iostream.h>
  int n;

  void main() /* début du programme principal */
  {

  /* partie déclaration des variables */

  int matrice[10][10];
  int vecteur[100];
  int i,j,k=0,m,dim;
  int supplement;    /* pour la permutation */
  int max,rgmax;

  puts("nnt     ****  Bienvenue:  ****");
  printf("nn Ce programme fait trier une matrice donnée en décroissance");
  puts("                                ****               ****             ");
  puts("                       ****   ");
  printf("nIntroduire le nombre de lignes de la matrice :");
  scanf("%d",&m);
  puts("nIntroduire le nombre de colonnes:");
  scanf("%d",&n);
  dim=n*m; /*dim est la dimension du vecteur émanant de la matrice */

  /* ici on va saisir la matrice, en meme temps on remplit le vecteur */
  puts("nSaisissez les éléments de la matrice :n");
  for (i=0; i<m; i++)
  for (j=0; j<n; j++)
    {
   printf("Elément [%d][%d] : ",i,j);
   scanf("%d", &matrice[i][j]);
   supplement=matrice[i][j];
   vecteur[k]=supplement;  //remplissage du vecteur en meme temps que la
           // saisie de la matrice pour économiser les instructions */
   k++;
    }

  clrscr();       //on efface l'écran surchargé
  puts("Voici la matrice que vous avez tapé:");
   for(i=0;i<m;i++)
   {
   for(j=0;j<n;j++)
   printf("%3d",matrice[i][j]);
   printf("n");
   }

  /* maintenant on va trier le vectuer en décroissance */

 for(i=0;i<dim;i++)
 {
 max=vecteur[i];
 rgmax=i;
 for(j=i+1;j<dim;j++)
  {
  if(max<vecteur[j])
    {
    max=vecteur[j];
    rgmax=j;
    }
  }
  vecteur[rgmax]=vecteur[i];
  vecteur[i]=max;
  }

printf("n");
k=0;

/* maintenant, on va affecter les éléments du vecteur à la matrice */
for(i=0;i<m;i++)
 for(j=0;j<n;j++)
 {
 matrice[i][j]=vecteur[k];
 k++ ;}
 puts("nnVoici la matrice triée:");
 for(i=0;i<m;i++)
 {
 for(j=0;j<n;j++)
 printf("%3d",matrice[i][j]);
 printf("n");
 }

cout<<"nntCe programme est réalisé par :n";
cout<<"nntt Prénoom :       Billal";
cout<<"ntt Nom :           BEGUERADJ";

}

A voir également

Ajouter un commentaire

Commentaires

leadertarik
Messages postés
1
Date d'inscription
vendredi 4 décembre 2009
Statut
Membre
Dernière intervention
21 décembre 2009

import java.io.*;
import java.util.*;
public class tri {
//par le leader
//Tarik
public static void main(String[] args) throws IOException{
BufferedReader c=new BufferedReader(new InputStreamReader (System.in) ) ; // TODO, add your application code
System.out.println("Hello World!");
int tableau[][]=new int [4][4];

for(int i=0;i<4;i++)
{ for(int ii=0;ii<4;ii++)
{

int j=(int)(Math.random() * (100-0)) + 0;
tableau[i][ii]=j;

System.out.print (" "+tableau[i][ii]);

}System.out.println ();}
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
for(int ii=0;ii<4;ii++)
{
for(int jj=0;jj<4;jj++)
{
if(tableau[i][j]<tableau[ii][jj])
{
int aux = tableau[i][j];
tableau[i][j]= tableau[ii][jj];
tableau[ii][jj] = aux;
}}}}}
System.out.println ();
for(int i=0;i<4;i++)
{ for(int ii=0;ii<4;ii++)
{
System.out.print (" "+tableau[i][ii]);}System.out.println ();}
System.out.println ("par tarik contactez-moi sur leader_tariman@hotmail.fr" );
}
}
PCBill
Messages postés
48
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
29 septembre 2009

Merci beaucoup Monsieur ARNAUD :

Grâce à vous j'ai deviné à quel point je suis stupide !
Je comprends à présent votre proposition et je ne vais pas tarder à l'implémenter.
Merci beaucoup.
Arnaud16022
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
*hum* tu c'est ce que c'est un pointeur ? ...
PCBill
Messages postés
48
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
29 septembre 2009

Bonjour ;
Le problème est toujours là : vous vous êtes servi d'un tableau intermédiaire pour trier ma matrice !!! C'est justement ce que je veux éviter !!!

int * matrice;
int * tableau;
tableau = (int*) malloc(x*y*4);
matrice = tableau;
// remplissage de la matrice
// bubble sort du tableau
// La matrice est triée.....


Merci quand même !!
Byyyyyyyyyyyyyyyyyyyyyyyyyye!
> PCBill
Messages postés
48
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
29 septembre 2009

voici une version sans utiliser un vecteur intermédiaire.
réalisé par moi: gueroihi mohamed.

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

main()
{ int M[3][3]={{8,4,6},{7,5,1},{4,9,2}};
int n,m,i,j,k,l,imin,jmin,jj,aux;
n=3;
m=3;

//Affichage avant le tri
printf("Matrice initiale:\n");
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
printf("%d\t",M[i][j]);
printf("\n");
}

//Le tri (tri par selection)
for (i=0;i<n;i++)
for (j=0;j<m;j++)
{ imin=i;
jmin=j;
for (k=i;k<n;k++)
{ if (k==i) jj=j+1; else jj=0;
for (l=jj;l<m;l++)
if (M[k][l]<M[imin][jmin])
{
imin=k; jmin=l;
}
}
//permutation
aux=M[i][j];
M[i][j]=M[imin][jmin] ;
M[imin][jmin]=aux;
}


//Affichage apres le tri
printf("\n\nmatrice triee:\n");
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
printf("%d\t",M[i][j]);
printf("\n");
}

getch();
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.