
   k%wtfE'                       d Z ddl ddlZ G d de      Z G d de      Zd Zd	 Zd
 Z	d Z
d ZddZd Zd Zd Zd Zd Zd Zd ZdZdZedk(  r e       Z e        yy)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                   $    e Zd Zd Zd Zd Zd Zy)Blockc                     || _         t        j                  | dd       | j                          | j	                  |dz  dd       | j                  d       | j                          y )NsquareF)shapevisibleg      ?   black)sizeTurtle__init__pu	shapesize	fillcolorst)selfr   s     8/tmp/python/lib/python3.12/turtledemo/sorting_animate.pyr   zBlock.__init__   sM    	He<	tcz3*w	    c                 &    | j                  d       y )Nredr   r   s    r   glowz
Block.glow    s    ur   c                 &    | j                  d       y )Nr   r   r   s    r   unglowzBlock.unglow#   s    wr   c                 8    dj                  | j                        S )NzBlock size: {0})formatr   r   s    r   __repr__zBlock.__repr__&   s     ''		22r   N)__name__
__module____qualname__r   r   r   r    r   r   r   r      s     3r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Shelfc                      || _         d| _        y)z.create a shelf. y is y-position of first blockijN)yx)r   r'   s     r   r   zShelf.__init__,   s    r   c                     |j                         \  }}}|dz  dz  }|j                  | j                  |z          |j                  | j                  dt        |       z  z          | j                  |       y )Nr
      "   )r   setyr'   setxr(   lenappend)r   dwidth_y_offsets        r   pushz
Shelf.push1   s]    kkmq!19r>	tvv !	tvvSY&'Ar   c                 f    | |d  D ])  }|j                         \  }}|j                  |dz
         + y Nr+   posr-   r   ibxposr2   s        r   _close_gap_from_izShelf._close_gap_from_i9   1    abAeegGD!FF4"9 r   c                 f    | |d  D ])  }|j                         \  }}|j                  |dz          + y r6   r7   r9   s        r   _open_gap_from_izShelf._open_gap_from_i>   r>   r   c                     t         j                  | |      }|j                          |j                  d       | j	                  |       |S )N   )listpopr   r,   r=   )r   keyr;   s      r   rD   z	Shelf.popC   s9    HHT3		ss#r   c                 *   | j                  |       t        j                  | ||       |j                  | j                  d|z  z          |j                         \  }}}|dz  dz  }|j                  | j                  |z          |j                          y )Nr+   r
   r*   )	r@   rC   insertr-   r(   r   r,   r'   r   )r   rE   r;   r1   r2   r3   s         r   rG   zShelf.insertJ   su    c"D#q!	tvvS !kkmq!19r>	tvv !	
r   N)	r    r!   r"   r   r4   r=   r@   rD   rG   r#   r   r   r%   r%   *   s     


r   r%   c                 *   t        |       }t        d|      D ]y  }|}|dkD  rO| |   j                  | |dz
     j                  k  r-|dz
  }|dkD  r#| |   j                  | |dz
     j                  k  r-| j                  || j	                  |             { y )N   r   r.   ranger   rG   rD   )shelflengthr:   holes       r   isortrO   T   s    ZF1fQh58==5?+?+??!8D Qh58==5?+?+??T599Q<(	 
 r   c                     t        |       }t        d|dz
        D ]a  }|}t        |dz   |      D ]$  }| |   j                  | |   j                  k  s#|}& ||k7  sA| j                  || j	                  |             c y )Nr   rI   rJ   )rL   rM   jiminr:   s        r   ssortrS   ]   sx    ZF1fqj!q1uf%AQx}}uT{/// & 19LLEIIdO, "r   c                 @   | |   }| j                  || j                  |             |}t        ||      D ]E  }| |   j                  |j                  k  s | j                  || j                  |             |dz   }G | j                  || j                  |             |S NrI   )rG   rD   rK   r   )rL   leftrightpivot_indexpivotstore_indexr:   s          r   	partitionr[   g   s    +E	LL		+./K48==5::%LLeiil3%/K   
LLeii./r   c                 p    ||k  r1|}t        | |||      }t        | ||dz
         t        | |dz   |       y y rU   )r[   qsort)rL   rV   rW   rX   pivot_new_indexs        r   r]   r]   r   sE    e|#E4DeT?Q./e_q(%0	 r   c                     t                t                t        t        d            } t	        j
                  |        t        |       D ]f  \  }}t        |t        t                    D ]E  }t        |   j                  |dz   k(  st        j                  |t        j                  |             G h t        t               t        t        d       t                y )N
   rI   line)disable_keysclearrC   rK   randomshuffle	enumerater.   sr   rG   rD   	show_textinstructions1instructions2enable_keys)targetr:   trQ   s       r   	randomizero   y   s    N	G%)_F
NN6&!1q#a&!AtyyAE!AEE!H% " " mm!$Mr   c                 H    d|z  }t        dd|z
         t        | dd       y )Nr*   r   icenter)Courier   bold)alignfont)gotowrite)textrb   s     r   ri   ri      s&    9D4$;	$h%<=r   c                      t                t                t        d       t        t               t                t        t
               t        t        d       t                y )NzSelection SortrI   ra   )rc   rd   ri   rS   rh   rj   rk   rl   r#   r   r   start_ssortr{      8    N	G	!H	Gmm!$Mr   c                      t                t                t        d       t        t               t                t        t
               t        t        d       t                y )NzInsertion SortrI   ra   )rc   rd   ri   rO   rh   rj   rk   rl   r#   r   r   start_isortr~      r|   r   c                      t                t                t        d       t        t        dt        t              dz
         t                t        t               t        t        d       t                y )N	Quicksortr   rI   ra   )	rc   rd   ri   r]   rh   r.   rj   rk   rl   r#   r   r   start_qsortr      sD    N	Gk	!QA
	Gmm!$Mr   c                  h    t        d      ad} | D ]   }t        j                  t        |             " y )Ni8)
   r
      	   rI      r`            )r%   rh   r4   r   )valsr:   s     r   
init_shelfr      s*    dA*D	uQx r   c                  d    t        d d       t        d d       t        d d       t        d d       y )Nrh   r:   qr)onkeyr#   r   r   rc   rc      s*    	$	$	$	$r   c                      t        t        d       t        t        d       t        t        d       t        t        d       t        t
        d       y )Nr:   rh   r   r   space)r   r~   r{   r   ro   byer#   r   r   rl   rl      s4    	+s	+s	+s	)S	#wr   c                      t               j                          t                t                t	                t        t               t        t        d       t                t                y)NrI   ra   	EVENTLOOP)
	getscreenclearscreenhtpenupr   ri   rj   rk   rl   listenr#   r   r   mainr      s=    KD%'Lmm!$M
Hr   zApress i for insertion sort, s for selection sort, q for quicksortz spacebar to quit, r to randomize__main__)r   )__doc__turtlere   r   r   rC   r%   rO   rS   r[   r]   ro   ri   r{   r~   r   r   rc   rl   r   rj   rk   r    msgmainloopr#   r   r   <module>r      s      3F 3((D (T-	1>
 T2Z
&CJ r   