???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    .e                     @   s   d Z ddlT ddlZG dd deZG dd deZdd	 Zd
d Zdd Z	dd Z
dd Zd%ddZdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"Zd#Zed$kre Ze  dS )&a  

         sorting_animation.py

A minimal sorting algorithm animation:
Sorts a shelf of 10 blocks using insertion
sort, selection sort and quicksort.

Shelfs are implemented using builtin lists.

Blocks are turtles with shape "square", but
stretched to rectangles by shapesize()
 ---------------------------------------
       To exit press space button
 ---------------------------------------
    )*Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Blockc                 C   sF   || _ tj| ddd |   | |d dd | d |   d S )NZsquareF)shapeZvisibleg      ?   black)sizeTurtle__init__Zpu	shapesize	fillcolorst)selfr    r   2/usr/lib64/python3.8/turtledemo/sorting_animate.pyr	      s    
zBlock.__init__c                 C   s   |  d d S )NZredr   r   r   r   r   glow   s    z
Block.glowc                 C   s   |  d d S )Nr   r   r   r   r   r   unglow"   s    zBlock.unglowc                 C   s   d | jS )NzBlock size: {0})formatr   r   r   r   r   __repr__%   s    zBlock.__repr__N)__name__
__module____qualname__r	   r   r   r   r   r   r   r   r      s   r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Shelfc                 C   s   || _ d| _dS )z.create a shelf. y is y-position of first blockijN)yx)r   r   r   r   r   r	   +   s    zShelf.__init__c                 C   sP   |  \}}}|d d }|| j|  || jdt|    | | d S )Nr      "   )r
   setyr   setxr   lenappend)r   dwidth_y_offsetr   r   r   push0   s
    z
Shelf.pushc                 C   s0   | |d  D ]}|  \}}||d  qd S Nr   posr   r   ibZxposr$   r   r   r   _close_gap_from_i8   s    zShelf._close_gap_from_ic                 C   s0   | |d  D ]}|  \}}||d  qd S r'   r(   r*   r   r   r   _open_gap_from_i=   s    zShelf._open_gap_from_ic                 C   s,   t | |}|  |d | | |S )N   )listpopr   r   r-   )r   keyr,   r   r   r   r1   B   s
    

z	Shelf.popc                 C   sb   |  | t| || || jd|   | \}}}|d d }|| j|  |  d S )Nr   r   r   )	r.   r0   insertr   r   r
   r   r   r   )r   r2   r,   r#   r$   r%   r   r   r   r3   I   s    
zShelf.insertN)	r   r   r   r	   r&   r-   r.   r1   r3   r   r   r   r   r   )   s   r   c                 C   s\   t | }td|D ]D}|}|dkrD| | j| |d  jk rD|d }q| || | qd S )N   r   r    ranger   r3   r1   )shelflengthr+   Zholer   r   r   isortS   s     
r9   c                 C   sj   t | }td|d D ]N}|}t|d |D ]}| | j| | jk r,|}q,||kr| || | qd S )Nr   r4   r5   )r7   r8   jZiminr+   r   r   r   ssort\   s    r;   c                 C   sn   | | }|  || | |}t||D ].}| | j|jk r(|  || | |d }q(|  || | |S Nr4   )r3   r1   r6   r   )r7   leftrightpivot_indexZpivotZstore_indexr+   r   r   r   	partitionf   s    
r@   c                 C   s>   ||k r:|}t | |||}t| ||d  t| |d | d S r<   )r@   qsort)r7   r=   r>   r?   Zpivot_new_indexr   r   r   rA   q   s
    rA   c                  C   s   t   t  ttd} t|  t| D ]@\}}t|ttD ](}t| j	|d kr@t
|t| q@q*tt ttdd t  d S )N
   r4   line)disable_keysclearr0   r6   randomZshuffle	enumerater    sr   r3   r1   	show_textinstructions1instructions2enable_keys)targetr+   tr:   r   r   r   	randomizex   s    
rP   c                 C   s(   d| }t dd|  t| ddd d S )Nr   r   icenter)ZCourier   Zbold)ZalignZfont)Zgotowrite)textrD   r   r   r   rJ      s    rJ   c                   C   s@   t   t  td tt t  tt ttdd t  d S )NzSelection Sortr4   rC   )rE   rF   rJ   r;   rI   rK   rL   rM   r   r   r   r   start_ssort   s    rU   c                   C   s@   t   t  td tt t  tt ttdd t  d S )NzInsertion Sortr4   rC   )rE   rF   rJ   r9   rI   rK   rL   rM   r   r   r   r   start_isort   s    rV   c                   C   sL   t   t  td ttdttd  t  tt ttdd t  d S )NZ	Quicksortr   r4   rC   )	rE   rF   rJ   rA   rI   r    rK   rL   rM   r   r   r   r   start_qsort   s    rW   c                  C   s(   t dad} | D ]}tt| qd S )Ni8)
   r      	   r4      rB            )r   rI   r&   r   )Zvalsr+   r   r   r   
init_shelf   s    r_   c                   C   s,   t d d t d d t d d t d d d S )NrI   r+   qr)onkeyr   r   r   r   rE      s    


rE   c                   C   s6   t td t td t td t td t td d S )Nr+   rI   r`   ra   Zspace)rb   rV   rU   rW   rP   Zbyer   r   r   r   rM      s
    



rM   c                   C   s@   t    t  t  t  tt ttdd t  t	  dS )Nr4   rC   Z	EVENTLOOP)
Z	getscreenZclearscreenZhtZpenupr_   rJ   rK   rL   rM   Zlistenr   r   r   r   main   s    
 rc   zApress i for insertion sort, s for selection sort, q for quicksortz spacebar to quit, r to randomize__main__)r   )__doc__ZturtlerG   r   r   r0   r   r9   r;   r@   rA   rP   rJ   rU   rV   rW   r_   rE   rM   rc   rK   rL   r   msgZmainloopr   r   r   r   <module>   s,   *	





