Matlab - ranger des nombres croissants

Fermé
Mirage29 - 16 nov. 2009 à 19:05
 Mirage29 - 17 nov. 2009 à 08:56
Bonjour,

Ayant chercher pendant plusieurs heures un programme pour matlab, et n'ayant rien trouver qui fonctionne réelement, je vous pose mon problème suivant:

J'essai de créer un programme qui permet de ranger "N" nombres d'un tableau "T" tous dans l'ordre croissant.

voici un exemple: T=[8,5,9,2,15,7....]

>> T2=[2,5,7,8,9,15....]

J'aimerais savoir comment procéder? sans utiliser la fonction "sort" il me semble.

Merci de votre aide :)

5 réponses

en fait je voulais voir aussi si il était possible de trouver cette fonction "sort" dans le logiciel lui même, dans les dossiers
1
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
16 nov. 2009 à 20:09
t uveux dire, voir le code de "sort" ? je ne crois pas car les fonctions matlab sont "compilées".

Néanmoins un tri est simplement un algorithme, ensuite i lfaut adapter au langage.

Tu as plein de manières très classiques de faire des tri (c.f wikipéia sur Tri).

En gros ça consiste surtout en des boucles ou alors des fonctions "récursives dans l'âme" pour les plus performantes.

Les meilleures manières :
Quick Sort (tri rapide) - très rapide, plutôt compliqué à comprendre, récursif en général
Merge Sort (tri fusion) - plutot simple et très rapide
Shell sort
Bubble sort (tri "bulle") - à éviter absolument car tout pourri. Mais correct et très simple.

Je suppose, mais je ne suis pas sûr, que Matlab implémente un Quick Sort. Pour en être sûr c.f. l'aide, en général ils indiquent la méthode utilisée dans leurs algorithmes.

Sinon voici une manière simple :

Tu as un deuxième tableau avec que des 0.

Pour chaque indice du tableau : tu cherches dans le premier le minimum, et ensuite tu copies ce minimum dans ta première case. Tu remplaces le minimum dans l'ancien tableau par un nombre très grand comme Inf (pour pas qu'on retombe dessus en cherchant le min après). Ensuite tu boucles : tu cherches le min dans le premier et tu le copies dans la deuxième case, etc...
0
ben en fait j'y avais penser a cette idée. Seulement ce que j'aimerais moi c'est la situation suivante:

dans le premier tableau, il prend le premier nombre et le range dans le 2ème tableau, puis, on s'occupe du 2ème nombre dans le premier tableau.

Si il est plus petit > on le repositionne en position 1
Si il est plus grand > il va a la position suivante

Seulement je ne vois pas comment ordonner tout ca
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
16 nov. 2009 à 23:07
c'est possible, mais ça demande le fait de recréer tout le tableau lorsqu'il faut "décaler" tous les éléments pour repositionner l'élément trouvé.
ou éventuellement tu pourrais utiliser une matrice de permutation (plus ou moins) :

la matrice A :
0 0 0 0 0
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
1 0 0 1 0

décale tous les éléments d'un vecteur x vers le bas lorsqu'on fait A * x et mets 0 à la première place.

Mais bon je ne sais pas si c'est plus simple que de rechercher les minimums à chaque fois et de les mettre simplement à la suite

Il y a vraiment de très nombreuses manières faire tout ça.
0

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

Posez votre question
Merci de votre réponse Pacorabanix , seulement je n'arrive pas bien a comprendre comment on peut arriver a un tri de N nombres (qui peut tendre vers l'infini).

J'ai tenté d'utilisé une fonction while, cela dis, je ne suis pas davantage avancé. Je suis plus que débutant dans Matlab :)
0