B
    n]0                 @   s  d dl T dd Zdd Zdd Zd add	 Zd
d Zdd Zed ed ed ed e	e
dZx`edks~edkre	e
dZe
d ZeeeZed edkr*e
d ZedkreeZn0edkreeZnedkreeZneeZd aedeed    edeed   neeedZx|edD ]pZed ee Zee eZed! ed"ee j d#  ed$ ed%eed    ed&eed   q@W ed! e	e
dZqlW ed' e
d( d S ))    )*c             C   s   t | }d}d}xvt|d D ]f}|}x2t|d |D ] }|d7 }| | | | k r6|}q6W ||kr|d7 }| | | |  | |< | |< qW ||gS )u0   Trie une liste de nombres de manière croissanter      )lenrange)listen	nbre_compnbre_echangeiindexj r   p/Users/jerome/SynologyDrive/College/Informatique/OCI/1_Site/2_Algorithmique/1_Tri/documents/AnalyseComplexite.pyTriSelection	   s    r   c             C   s   d}d}xt dt| D ]~}| | }|}xD|dkrl| |d  |krl|d7 }|d7 }| |d  | |< |d }q*W |dkr~|d7 }||kr|d7 }|| |< qW ||gS )u0   Trie une liste de nombres de manière croissanter   r   )r   r   )r   r   Z	nbre_deplr
   eltZpositionr   r   r   TriInsertion$   s     r   c             C   s   d}d}xtt t| d ddD ]\}xVt |D ]J}|d7 }| | | |d  kr,| |d  | |  | |< | |d < |d7 }q,W qW ||gS )u0   Trie une liste de nombres de manière croissanter   r   )r   r   )r   r   r	   r
   r   r   r   r   	TriBullesB   s    "r   c             C   s   g }d }}t | }t |}x||k rv||k rvtd7 a| | || k r^|| |  |d7 }q|||  |d7 }q||kr|||d  7 }P q|| |d  7 }P qW |S )Nr   r   )r   compappend)Zliste1Zliste2r   r
   r   Zn1Zn2r   r   r   fusion[   s$    

r   c                s$    fdd  | | dd< t dgS )u[   
    TriFusion(list liste) -> None
    Trie la liste de nombres de manière croissante
    c                sB   t | dk r| S t | d t | d   | t | d d  S )N   )r   r   )r   )TriFusionInterner   r   r      s    z#TriFusion.<locals>.TriFusionInterneNzsans signification dans ce cas.)r   )r   r   )r   r   	TriFusionz   s    r   c             C   s   g }| dkr6x$t |D ]}|tdd|  qW |S | dkr^xt |D ]}|| qHW |S x"t |D ]}||d |  qhW |S dS )uZ    Génère une liste de type (aléatoire, croissante ou décroissante) et de taille donnésAr   r   Cr   N)r   r   randint)Z	type_listtailleresultr
   r   r   r   generate_list   s    r   ug   Ce programme permet d'analyser la complexite des 4 algorithmes de tri élémentaires étudies en cours.up   En sélectionnant l'option 1, vous pourrez analyser un algorithme particulier sur un type de listes particulier.ub   En sélectionnant l'option 2, vous pourrez analyser les 3 algorithmes sur un même type de listes.u:   En sélectionnant l'option 3, vous terminez le programme.
z$Choisissez une option entre 1 et 3 :r   r   z%Entrez la taille de la liste cobaye: uQ   Entrez le type de la liste cobaye ((A)léatoire, (C)roissante, (D)écroissante) :zVotre liste est generee...uW   Choisissez l'algorithme à appliquer ((B)ulles, (I)insertion, (S)élection), (F)usion :BISuA   Le nombre de comparaisons réalisees par l'algorithme choisi est uK   Le nombre de déplacements/échanges réalises par l'algorithme choisi est )r   r   r      N
u   Résultats pour le tri avec z :z'**************************************
u*   Le nombre de comparaisons réalisées est u4   Le nombre de déplacements/échanges réalisés est z
Goodbye...u0   Appuyez sur une touche pour fermer la fenêtre !)randomr   r   r   r   r   r   r   printintinputoptionr   upperZ
type_lister   ZalgoZ
complexitestrZ
algorithmer   r
   r   test__name__r   r   r   r   <module>   sT   




