Trier les valeurs d'un tableau par ordre croissant

clements42 Messages postés 16 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 20 juillet 2011 - 28 oct. 2008 à 15:06
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 - 14 mars 2010 à 16:18
bonjour,

j'ai un tableau de 1000 cases remplis de nombres aléatoires
j'aimerais que ces nombres (qui vont de -10000 à 10000) soient triés de façon croissante
comment faire ?

cordialement
A voir également:

12 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
28 oct. 2008 à 15:14
Salut,
En cherchant un peu=> ICI
Si c'est cela on valide la réponse, sinon on explique un peu mieux le problème.
@+: Ju£i€n
Pensez: Réponse acceptée
0
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
28 oct. 2008 à 15:15
Bonjour,
Tableau rempli de 1000 cases
Quel type de controle?
Comment sont placée les données?
Nombre de colonne aléatoire?
Nombre de ligne aléatoire?
Ordonné en ligne, colonne???

S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- <
0
cs_Diaks Messages postés 5 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 14 mars 2010
13 mars 2010 à 14:25
Bonjour tout le monde.
je me présente, Diaks, un petit bleu sur le forum, mais aussi sur VB6.
Mon problème c'est que je veux aussi trier les valeurs d'un tableau dans l'odre croissant, mais je n'arrive pas à m'en sortir avec le code sur le lien de jrivet.

Je n'arrive pas à l'adapter à mon code dont voici une partie:


Private Sub Command1_Click()

CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Input As #2

Input #2, Txt
Input #2, Txt
m = 0
ReDim A(0 To 300)
Do While Not EOF(2)
  Input #2, A(m)
  m = m + 1
Loop
n = m - 1
Close #2

End Sub


en fait avec Command1 on charge un fichier txt avec des données numériques, puis lecture du fichier et les mêmes données se retrouve dans le tableau A.

Ce que je voudrait c'est avec une Command2, trier le tableau A et afficher sa nouvelle disposition sur une listbox.

Que faut-il faire à partir de ce code-ci?
ou encore de celui-ci ?

Je vous remercie.


__________________________________________________________________________________________
Code with the best or die with the rest
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
13 mars 2010 à 14:29
bonjour
ajoute tes donner dans la liste et met la proprieté "SORTED" = true de la liste.

Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Diaks Messages postés 5 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 14 mars 2010
13 mars 2010 à 15:15
Bonjour, merci d'avoir répondu si vite.
Le problème avec la propriété "sorted" c'est qu'elle fait un tri lexicographique (1, 10, 11, 2, 21, 22,...)
Alors qu'il me faut un tri numérique (1,2,10,11,21,22,...)

je sais que les codes dont j'ai mis les liens permettent de faire ça, sauf que je ne sais pas comment m'y prendre pour les adapter et les utiliser ...


merci bcp en tout cas.

________________________________________________________________
Code with the best or die with the rest
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
13 mars 2010 à 15:24
boucle sur tes données et insère les dans la listes, ce sont des données numéric donc tu utilise une comparaison mathématique c'est tout (<>=).


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
13 mars 2010 à 15:37
exemple:

Private Sub Command1_Click()
addtolist 10
addtolist 2
addtolist 5
addtolist 4
addtolist 6
addtolist 6
addtolist 7
addtolist 9
addtolist 8
addtolist 6
addtolist 1
addtolist 3
End Sub

Sub addtolist(num As Long)

'si la liste n'est pas vide
If List1.ListCount > 0 Then
'on la parcour
dim i as Long
For i = 0 To List1.ListCount - 1
If List1.List(i) >= num Then
List1.AddItem num, i
'après l'ajout on quitte
Exit Sub
End If

Next
Else
'si liste vide on ajoute directement
List1.AddItem num
End If
End Sub


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
cs_Diaks Messages postés 5 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 14 mars 2010
13 mars 2010 à 19:36
lol j'aurai dû actualiser plus tôt, je me casse la tête depuis la lecture de ton avant dernier message.

je vais essayer ton code pour voir, mais ce qui m'intrigue c'est le "Sub addtolist(num As Long)"
Je ne comprend pas où ça se situe...dois je le placer dans "Private Sub Command2_Click()" ou bien je le met juste quelque part dans le code?

C'est un peu le genre de choses qui me bloquaient avec les 2 liens plus haut.

Merci bien^^

___________________________________________________________________________________________
Code with the best or die with the rest
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
14 mars 2010 à 00:07
tu le met quelque part ou tu veut


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
cs_Diaks Messages postés 5 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 14 mars 2010
14 mars 2010 à 13:14
Bonjour ^^

Voilà, j'ai passé beaucoup de temps sur ce truc, mais je suis toujours coincé.
Le côté positif c'est que j'ai compris ton code, je l'ai essayé et il marche.
Cependant il y'a une faille, dès que le nombre qui suit "addtolist" est supérieur à 100 (101 par exemple) il ne s'affiche pas sur la listbox.

J'ai par ailleurs essayé de remplacer ou d'adapter le "addtolist" dans mon code;
ce qu'il me faut c'est d'abord une boucle de AddItem qui va mettre les valeurs lues du fichier texte sur la listbox, puis la fonction pour reclasser le tout.

voici le code que j'ai pu faire mais qui ne marche pas terrible. par exemple pour trier (5,2,15,1), je me retrouve avec (1,2,5,5,2,15,15,1)...
Option Explicit

Private Sub Command1_Click()


CommonDialog1.ShowOpen

Open CommonDialog1.FileName For Input As #2  'chargement du fichier txt
 
Input #2, Txt    'il n'ya rien sur les 2 premières lignes
Input #2, Txt

m = 0  'initialisation du compteur

ReDim A(0 To 300)
Do While Not EOF(2)
  Input #2, A(m)  'lecture à partir du fichier txt
  List1.AddItem A(m) 'écriture sur la listbox des données lues dans l'ordre de lecture
  m = m + 1
Loop
n = m - 1

For m = 0 To n    'utilisation de la fonction addtolist....ça démarre bien
                    'mais ça finit par remettre les mêmes nombres
  addtolist A(m)
Next

Close #2



End Sub

Sub addtolist(num As Long)

'si la liste n'est pas vide
If List1.ListCount > 0 Then
'on la parcour
Dim i As Long
For i = 0 To List1.ListCount - 1
If List1.List(i) >= num Then
List1.AddItem num, i
'après l'ajout on quitte
Exit Sub
End If

Next
Else
'si liste vide on ajoute directement
List1.AddItem num
End If
End Sub




___________________________________________________________________________________________
Code with the best or die with the rest
0
cs_Diaks Messages postés 5 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 14 mars 2010
14 mars 2010 à 14:28
C'est bon j'y suis arrivé avec la code du lien-ci

voici ce que ça donne:
'Déclarations dans un module
Public m As Long, n As Long, A() As Long, Txt As String

Option Explicit

Private Sub Command1_Click()


CommonDialog1.ShowOpen

Open CommonDialog1.FileName For Input As #2  'chargement du fichier txt
 
Input #2, Txt    'il n'ya rien sur les 2 premières lignes
Input #2, Txt

m = 0  'initialisation du compteur

ReDim A(0 To 300)
Do While Not EOF(2)
  Input #2, A(m)  'lecture du fichier txt (dans lequel il n'y a qu'une seule colonne de nombres)
  m = m + 1
Loop
n = m - 1
Close #2

QSort A(), 0, n 'tri du tableau qui vient d'être saisie plus haut

For m = 0 To n
  List1.AddItem A(m)      'affichage du tableau trié
Next m


End Sub

Sub QSort(t() As Long, Deb As Long, Fin As Long)
'TRI QUICKSORT RECURSSIF (TRI RAPIDE)

'Déclaration des variables
Dim i As Long         'indice
Dim j As Long         'indice
Dim X As Long         'valeur pivot
Dim Temp As Long      'Valeur temporaire


'Algo Tri
i = Deb   'sauve le début
j = Fin    'sauve la fin
X = t((i + j) \ 2)  'valeur pivot

Do
  Do While t(i) < X: i = i + 1: Loop 'recherche par la bas
  Do While t(j) > X: j = j - 1: Loop 'recherche par le haut

  If i <= j Then
    Temp = t(i)     'inversion t(i) et t(j)
    t(i) = t(j)
    t(j) = Temp
    i = i + 1       'Passe au suivant
    j = j - 1
  End If

Loop Until i > j

If j > Deb Then QSort t(), Deb, j   'trie par le bas
If i < Fin Then QSort t(), i, Fin   'trie par le haut

End Sub


Merci beaucoup Claiyah, c'est grace à ton code si j'ai compris comment m'y prendre


_____________________________________________________________________________________________
Code with the best or die with the rest
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
14 mars 2010 à 16:18
de rien mon ami


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
-1
Rejoignez-nous