Cours d’Algorithmique-Programmation e2 partie (IAP2): programmation imp´erative et structures de donn´ees simples Compl´ements sur les tableaux + Pointeurs en C Sandrine Blazy er` e- 1 ann´ee 7 novembre 2007 e S.Blazy (ENSIIE) Cours d’Algorithmique-Programmation 2 partie (IAP2):7pnovembrogramm reation2007imp´erat 1i/ve24et structures de donn´ees simples1 Tris par s´election Matrices Le type pointeur sur ´el´ement Pointeurs et arguments argc et argv e S.Blazy (ENSIIE) Cours d’Algorithmique-Programmation 2 partie (IAP2):7pnovembrogramm reation2007imp´erat 2i/ve24et structures de donn´ees simplesTri par s´election Principe On cherche le plus petit ´el´ement du vecteur et on l’´echange avec le premier ´el´ement puis on trie le reste. Plus pr´ecis´ement et it´erativement, `a la i-`eme ´etape du tri d’un vecteur de longueur n, on cherche l’indice j du plus petit ´el´ement du sous-vecteur d’indice compris entre i et n−1 et on ´echange cet ´el´ement avec l’´el´ement d’indice i. L’´echange n’est effectivement r´ealis´e que si ce plus petit ´el´ement n’est pas d´ej`a en i. e S.Blazy (ENSIIE) Cours d’Algorithmique-Programmation 2 partie (IAP2):7pnovembrogramm reation2007imp´erat 3i/ve24et structures de donn´ees simplesTri par s´election Interfaces /∗ Interface indice min sous vecteur: vecteur−> int post calcule l’indice du plus petit ´el´ement du vecteur ∗/ /∗ Interface tri selection: vecteur−> vecteur post trie le tableau dans l’ordre croissant ∗/ e S.Blazy (ENSIIE) Cours ...
Pluspre´cise´mentetit´erativement,a`la i -e`me´etapedutrid’unvecteurde longueur n , on cherche l’indice j dupluspetit´ele´mentdusous-vecteur d’indice compris entre i et n − 1eton´echangecete´le´mentavecl’e´l´ement d’indice i .L’e´changen’esteffectivementre´alise´quesicepluspetit ´ele´mentn’estpasde´j`aen i .
let rec supprimer e l = match l with | [ ] − > [ ] | x : : l ’ − > i f x=e then l ’ else x : : ( supprimer e l ’ ) ; ;
let rec indice min sous vecteur l = match l with | [ ] − > failwith ”indice min sous vecteur : l i s t e vide” | [x] − > x | x : : l ’ − > min x (indice min sous vecteur l ’ ) ; ;
l ’ ) ; ;
let rec tri selection l = match l with | [ ] − > [ ] | − > let m = indice min sous vecteur l in letl’=supprimermlinm::(tris´election
int indice min sous vecteur( int t [ ] , int imin = debut; int i ; for ( i = debut+1; i < =fin;i++) { i f (t [ i ] < t [ imin]) imin = i ; } return imin ; }
Contrairementauxfonctionsdetridelistesquiretournentunelistetri´ee, les fonctions de tri de vecteurs agissent par effet de bord : elles modifient levecteurquileurestpass´eenargumenteta`lafindutraitement,ce vecteuresttrie´.Onditqu’ellestravaillent en place .
Comparaison :laversionsurlesvecteursestconsid´erablementplussimple. Eneffet,nousnousrestreignonsauxe´le´mentsautresquelepluspetit simplementenincre´mentantl’indice i apr`esavoire´change´lepluspetit ´el´ementavecceluid’indice i alors que pour les listes, il nous faut parcourir a`nouveaulalistepourallersupprimercepluspetit´el´ement.