Débutant en C : trier tableau ? [Fermé]

Signaler
-
Messages postés
3
Date d'inscription
mardi 24 novembre 2015
Statut
Membre
Dernière intervention
27 novembre 2015
-
Es ce qu'une personne sait comment trier un tableau de valeurs par ordre croissant en langage C ?

car je dois initialiser un tableau de 7 valeurs aléatoires en les triant dans l'ordre croissant ds un meme tableau

merci davance c urgent

16 réponses


salut,

juste une autre solution. compilé sous linux

exo du www.siteduzero.fr

// une fonction ordonnerTableau qui classe les valeurs d'un tableau dans l'ordre croissant. Ainsi, un tableau qui vaut {15, 81, 22, 13} doit à la fin de la fonction valoir {13, 15, 22, 81} !

#include <stdio.h>


void ordonnerTableau(long tableau[], long tailleTableau);



int main(int argc, char *argv[])
{
long tab[4] = {15,81,22,13};

int i=0;

ordonnerTableau(tab,4);

for(i=0; i<4; i++)
{
printf("%ld\n",tab[i]);
}
return 0;
}

void ordonnerTableau(long tableau[], long tailleTableau)
{
long i,t,k=0;

for(t = 1; t < tailleTableau; t++)
{
for(i=0; i < tailleTableau - 1; i++)
{
if(tableau[i] > tableau[i+1])
{
k= tableau[i] - tableau[i+1];
tableau[i] -= k;
tableau[i+1] += k;
}
}
}
}
18
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 93620 internautes nous ont dit merci ce mois-ci

Messages postés
101
Date d'inscription
jeudi 19 février 2009
Statut
Membre
Dernière intervention
26 novembre 2010
62
Salut, désolé de remuer les vieux sujets mais pourrais tu m'expliquer la ligne
for(t = 1; t < tailleTableau; t++)
stp?
car j'ai essayé sans et j'ai vu que les 2 premiers seulement étaient rangé mais j'ai du mal à comprendre... merci :)
dudulle93
le for que tu ne comprends pas est une notation élémentaire des boucles for en langage objet.
Donc for(int t=1;t<tailleTableau;t++) signifie:
pour un index de type entier à partir de 1
tant que l'index t est inférieur à la taille du tableau
incrémente t (bien que je préfère la notation ++t)

En globale cela veut dire que tu vas boucler de 1 à la taille du tableau -1, et a chaque boucle tu incrémentes ton compteur t.

J'espère que c'est plus clair pour toi
en ajoute quoi pour change se pregramme a une fonction d'un programme si en veux ajoute une valeur comment en peux garde l'ordre croissant
#include <stdio.h>
#include <stdlib.h>
void ordonner(int T[],int);

int main(int argc, char *argv[])
{
int T[5]={7,4,5,3,8},i;

ordonner(T,5);
for(i=0;i<5;i++)
{
printf("T[%d]=%d\n",i,T[i]);
}
system("pause");
return 0;
}
void ordonner(int T[],int taille)
{
int i,j,p=0;
for(j=0;j<taille;j++)
{
for(i=0;i<taille;i++)
{
do
{
p=T[i];

T[i]=T[i+1];

T[i+1]=p;

}while(T[i]>T[i+1]);
}
}
}
Messages postés
55
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
27 août 2012
13
voila un petit programme de tri croissant dans un tableau unidimensionnel!!..reste a compiler!!
#include<stdio.h>
#include<stdlib.h>
main()
{
int i,n,c,j;
int T[n];
printf("entrer la valeur de n : ");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("T[%d]= ",i);
scanf("%d",&T[i]);
}
for (j=1;j<=n;j++)
{
for (i=1;i<n;i++)
{
if (T[i]<T[i+1])
{
c=T[i];
T[i]=T[i+1];
T[i+1]=c;
}
}
}
for (i=1;i<=n;i++)
//affichage
printf("T[%d]=%d \n",i,T[i]);
system("pause");
}
Messages postés
227
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
24 juillet 2012
26
Selon toi le compilateur crée par GNU compiler (GCC) est un mauvais compilateur?
Ben je me demande alors quel type de compilateur tu utilise O_O.
Messages postés
21801
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 674
Non, c'est un bon compilateur. Encore faut-il savoir correctement l'utiliser...
gcc tout court n'est pas standard. Par contre, il existe plein d'options. Par exemple : gcc -pedantic -ansi (je ne parle pas de la mise en place des warnings, et autres contrôles) permet de s'assurer qu'on fait du code standard.
Pour utiliser l'ISO C99, il faut utiliser -std=c99 mais attention gcc n'est pas encore entièrement compatible C99 (http://gcc.gnu.org/c99status.html
Un code qui marche avec gcc tout court n'est pas sûr de passer sur un autre compilateur (même si souvent, cela marche). Alors qu'un code fonctionnant avec les switchs que je t'ai donnés marchera sur n'importe quel autre compilateur standard.
C'est juste cette solution mais seulement votre deuxieme boucle c'est a dire "for(j=1;j<=n;j++)" ne sert a rien ici.Elle inutile.Merci
Messages postés
21801
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 674
Diop,
Tu réponds à une question qui date de plus de deux ans où on a déjà répondu...
Cdlt,
Messages postés
3
Date d'inscription
mardi 24 novembre 2015
Statut
Membre
Dernière intervention
27 novembre 2015

Logiquement je trouve que c'est juste, sauf il manque un peu de précision, a la ligne 6 tu dois utiliser int*.
c'est tout.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

main()
{
int N,* tab,x,i,nombre,temp;
printf("N:");
scanf("%d",&N);
srand((unsigned int)time(NULL));
tab=(int *)malloc(N*sizeof(int));
for(i=0;i<N;i++)
{
nombre = rand()%100 +1;
tab[i]=nombre;
}
printf("Tableau non trier:\n");
for(i=0;i<N;i++)
{
printf("tab[%d] : %d\n",i,tab[i]);
}
printf("\n\nTableau trier:\n");
for(x=0;x<N;x++)
{
for(i=0;i<N;i++)
{
if((tab[i]) < (tab[i+1]))
{
temp=tab[i];
tab[i]=tab[i+1];
tab[i+1]=temp;
}
}
}
for(i=0;i<N;i++)
{
printf("tab[%d] : %d\n",i,tab[i]);
}
getch();
}
Messages postés
21801
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 674
Ton code contient des erreurs.
if((tab[i]) < (tab[i+1]))
Puisque i varie de i à N-1 avec le for, la valeur maximale de i+1 sera N. Et tab[N] est hors du tableau...

La fonction main renvoie un int. Donc son prototype est : int main (void)
Et il faut mettre return 0; à la fin.

Ensuite en amélioration :
nombre = rand()%100 +1;
Pourquoi passer par une variable nombre ?
Salut!

#include <stdlib.h>
void qsort(void base, size_t nmemb, size_t size,
	int (*compar)(const void *, const void *));


Il n'y a rien à faire et ça fait parti du standard C que demande plus le peuple?

NB: Pour choisir l'ordre croissant ou décroissant il suffit de changer la fonction compar.
void ordonnerTableau(int tableau[], int tailleTableau){
int i, m, k;
for(k = 0; k < tailleTableau; k++) {
for(i = 1; i < tailleTableau; i++) {
m = tableau[i] - tableau[i - 1];

if(m < 0) {
tableau[i] = tableau[i - 1];
tableau[i - 1] = tableau[i] + m;
}

}}
for(i = 0; i < tailleTableau; i++) {
printf("%d\n", tableau[i]);
}
}
Cela est faux si l'on utilise des nombres réels.
Messages postés
21801
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 674
Normal puisqu'on parle d'entiers. Pour les réels tu utilises le type ad hoc et ça remarche ;-)
voila un code qui trie un tableau de manière croissant en langage C:
---------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

void trier(int table[],int taille);



int main(int argc, char *argv[])
{
long tab[6] = {150,-83,112,231,5,12};

int i=0;

trier(tab,6);

for(i=0; i<6; i++)
{
printf("%ld\n",tab[i]);
}
return 0;
}

void trier(int table[],int taille)
{
int i,j,min,d=0;
for(i=0;i<taille-1;i++)
{
min=table[i];
for(j=i+1;j<taille;j++)
{
if(table[j]<min)
{
min=table[j];
d=j;
}
}
if(table[i]!=min)
{
table[d]=table[i];
table[i]=min;
}

}
}

-------------------------------------------------------------------------------------------------
Voilà tout le programme de tri(sous windows) par la methode trimin, reste à la compiler :
#include<stdio.h>
#include<stdlib.h>
main()
{ int tab[7]="5,89,23,999,2";
int i,j,indmin,q;
for(i=0;i<7;i++)
{ indmin=i;
for(j=i+1;j<7;j++)
if(tab[j]<tab[i]) indmin=j;
q=tab[i];
tab[i]=tab[indmin];
tab[indmin]=q;
}
system("pause");
return 0;
}
Bon courage
bonjour,
helali j'espere ke tou ca se passe bien chez toi,est ce que vous pouvez me dire d'ou je peux trouver des exercices du language c precisement les tableaux comme (tri par insertion,tri normale.... ) avec des pointeur.
alors si vous voulez me contacter voila mon adresse E-mail:alaeand1@hotmail.com
Merci
Messages postés
73
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
5 octobre 2012
7
et les ga jai pas fait attention à la date de toute façon c'est pas grave
les solutions sont donc là et peuvent y deumerer
oui je cherche à trie en c basic
Bonjour,

Réinventer la roue?!
C'est sur mais quand c'est pour apprendre, c'est très utile :)
donc si quelqu'un a une solution car j'ai le même soucis sauf que moi l'utilisateur doit rentrer 8 valeures entre 0 et 255 et j'ai pensé que créer deux tableaux, un stockant les valeures entrées, et un autre pour afficher les valeures triées.
Mais j'ai pas de réelle expérience en algo donc un pti coup de pouce n'est pas de refus

Merci d'avance :)
Messages postés
73
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
5 octobre 2012
7
been je vais t'aider si ce forum existe c'est tout de meme pour s'entraider aussi car tout vaut le cout pour apprendre:

#include<stdio.h>/* declaration des bibliotheques */
#include<conio.h>

var
int i,j; /*declaration des variables */
float A[7],temp;
void main()
{
for (i=0;i<7;i++)
{
printf("A[%d]=",i+1);
scanf("%f",&A[i]);
}
printf("affichage du tableau:\n");
for (i=0;i<7;i++)
printf("%.2f\t",A[i]);
printf("resultat du tableau trié:\n");
for (i=0;i<6;i++)
for (j=i+1;j<7;j++)
if (A[i]>=A[ j]
{
temp=A[i];
A[i]=A[ j];
A[ j ] =temp;
}
for (i=0;i<7;i++)
printf("%.2f\t",A[i]);
getch();/*pour retenir l'affichage*/
}
j'esper que ton probleme est resolu
Merci bien :)

Et merde à scoubidou si t'es pas content tu répond pas et surtout que la réponse n'est pas donnée plus haut au "probleme" que j'ai soulevé :)
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
172
si elle est marquée.
ensuite tu restes poli
ensuite tu n'as pas cherché sur google un minimum parce que tu veux une réponse toute cuite.

2 mot à taper : qsort msdn
et ca donne :
[url]https://www.microsoft.com/en-us/download/details.aspx?id=55979[/url]

Je n'irais pas jusqu'aux STL parce que là non plus tu n'as pas du chercher...
/*voici un algorithme de tri pour débutant*/
#include<stdio.h>
int main()
{
int N,i,T[N],tmp,echange;
echange=1;

printf("Donner la taille du tableau");
scanf("%d",&N);

for(i=0; i<=N-1; i++)
{
printf("Donner la valeur de la colonne %d \t",i);
scanf("%d",&T[i]);
}

while(echange==1)
{
echange=0;
for(i=0; i<=N-1; i++)
if( T[i] > T[i+1] )
{

tmp = T[i];
T[i] = T[i+1];
T[i+1] = tmp;
echange=1;
}

//trie du tableau

}

for(i=0; i<=N-1; i++)
printf("T[%d]=%d",i+1,T[i]);

fflush(stdin);
getchar();
}
merci beaucoup tu m'a sauver la vie
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
172
Regle n°1 : ne JAMAIS réinventer la poudre.

http://www.stlport.org/

Les STL Port sont un groupe de template C++ permettant de gérer les listes, les tri, les streams....

Règle n°2 : faire un grep sur google
http://www.delorie.com/gnu/docs/glibc/libc_143.html

Règle n°3 : Aller je donne la réponse : fonction qsort()
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
172
ah joli, un sujet déterré de 4 ans...

Alors déjà on ouvre un autre topic pour commencer.

ensuite la réponse est donnée plus haut en 1 et 2.

Si le code ne te parait pas clair, remet le en forme.

sinon Google sur qsort().

On ne peut pas non plus t'apprendre à progammer, il y a des bouquins pour cela.