Principe : A partir d'une suite d'entiers calculer la plus grande suite de nombres pairs contenue dans cette liste
Exemples :
| /* La liste tab de taille longueur */ |
| maxi <== 0 |
| i <== 0 |
| Répéter |
| compte <== 0 |
| /* Comptage des nombres pairs successifs */ |
| tant que (tab[i] est pair) ET (i < longueur) |
| compte <== compte + 1 |
| i<== i + 1 |
| fin_tant_que |
| /* Si cette suite de pairs est plus longue que la précédente */ |
|
si compte > maxi |
| alors maxi <== compte |
| i <== i + 1 |
| tant_que (i < longueur) |
Principe : Faire une place dans la chaîne et insérer une lettre de la chaîne à insérer, recommencer ce traitement jusqu'à la fin de la chaîne à insérer.
| /* On insere la chaîne insert de taille long_insert dans la chaîne chaine de taille long_chaine en position pos*/ |
| /* le j sert à travailler dans insert */ |
| j <== 0 |
| Répéter |
| /* on "fait une place" en position pos + j */ |
| Répéter pour i allant de long_chaine à pos + j par pas de -1 |
| chaine[i] <== chaine[i-1] |
| fin_répéter |
| /* on place l'élément à insérerj */ |
| chaine[pos + j] <== insert[j] |
| j <== j + 1 |
| long_chaine <== long_chaine + 1 |
| tant_que (j < long_insert) |
Principe : Construire une nouvelle liste par insertion successive des éléments de la liste d'origine dans la liste résultat. La liste résultat commence donc avec un unique élement et reste en permanence triée.
La recherche de la place d'insertion se fait par un algorithme de recherche simple.
| mystere[0] <== tab[0] |
| lmystere <== 1 |
| Répéter pour i allant de 1 à longueur -1 |
| /* ?????????? */ |
| j <== 0 |
| tant que (tab[i] > mystere[j]) ET (j <lmystere) |
| j <== j + 1 |
| fin_tant_que |
| /* ?????????? */ |
| Répéter pour k allant de lmystere -1 à j par pas de -1 |
| mystere[k+1] <== mystere[k] |
| fin_de_répéter |
| mystere[j] <== tab[i] |
| lmystere <== lmystere + 1 |
| fin_de_répéter |
#include <stdio.h>
#define MAX 15
typedef struct liste {
int taille;
int elts[MAX];
}liste;
/* Tri par insertion simple */
void tri_ins(liste l1,liste *l2)
{
int i, j, k;
l2->taille=1;
l2->elts[0]=l1.elts[0];
for( i = 1; i < l1.taille; i ++)
{
/* Recherche de la place d'insertion */
j = 0;
while ((l1.elts[i]>l2->elts[j]) && (j<l2->taille))
j++;/* Décalage des éléments de la liste */
for( k=l2->taille-1; k >= j; k--)
l2->elts[k+1]=l2->elts[k];/* Insertion de l'element */
l2->elts[j]=l1.elts[i];
l2->taille++;
}}