Discussions Générales > Bus DCC

Nouvelle souris sans fil à mémoire

<< < (2/3) > >>

Thierry:
De rien.

Pour aller un peu plus loin et faire profiter tout le monde, voici un bout de code pour expliquer:

On commence par déclarer une liste, et la remplir avec un numéro croissant:


--- Code: --- byte listeTriee[255];

for (int i = 0; i < 255; i++)
listeTriee[i] = i;

--- Fin du code ---

On a ainsi la liste des locos non triée, désignée par leur position dans l'EEPROM.
Puis on réalise le tri proprement dit par la méthode dite du tri à bulle: (https://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles)


--- Code: --- for (int i = 255 - 2; i >= 0; i--)
{
for (int j = 0; j <= i; j++)
{
if (loco[listeTriee[j+1]].adresse < loco[listeTriee[j]].adresse)
{
byte t = listeTriee[j + 1];
listeTriee[j + 1] = listeTriee[j];
listeTriee[j] = t;
}
}
}

--- Fin du code ---

Si l'ordre entre deux locos n'est pas le bon, on échange simplement les octets de la liste triée.
Pour tester sur le nom ou autre chose, il suffit de remplacer le '.adresse' par autre chose. Pour trier dans l'ordre inverse, changer le '<' par un '>' !
Je n'ai ni compilé ni testé ce code...

bobyAndCo:
Trop top   ;D Je ne connaissais pas le tri à bulle, ni même le tri shaker, la fonction tri étant disponible dans la plus part des langages !

Merci Thierry pour l'astuce.

Dominique:
Super intéressant tout ça, merci Thierry  ;D

Moi j’ai bien envie d’explorer le tri à peigne.

Thierry:
Oui, ce type de tri va plus vite, mais il prend un peu plus de mémoire programme (on est déjà à 98%!) et la vitesse ne semble pas le critère déterminant.

Jean-Luc:
Quicksort forever.  8)

Plus sérieusement, il faut prendre un algorithme efficace et peu gourmand en mémoire temporaire

https://fr.m.wikipedia.org/wiki/Algorithme_de_tri

Complexité spatiale de 1 (ne nécessite pas de mémoire additionnelle), cas moyen en n log n, pire cas en n log n si possible. Le gagnant serait le smoothsort : https://fr.m.wikipedia.org/wiki/Smoothsort de Dijkstra (un gars qui vaut le coup).

Navigation

[0] Index des messages

[#] Page suivante

[*] Page précédente

Utiliser la version classique