
    ѝi                         S r SSK7  SSKr " S S\5      r " S S\5      rS rS	 rS
 r	S r
S rSS jrS rS rS rS rS rS rS rSrSr\S:X  a  \" 5       r\" 5         gg)a  

         sorting_animation.py

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

Shelves are implemented using builtin lists.

Blocks are turtles with shape "square", but
stretched to rectangles by shapesize()
 ---------------------------------------
       To exit press space button
 ---------------------------------------
    )*Nc                   ,    \ rS rSrS rS rS rS rSrg)Block   c                     Xl         [        R                  U SSS9  U R                  5         U R	                  US-  SS5        U R                  S5        U R                  5         g )NsquareF)shapevisibleg      ?   black)sizeTurtle__init__pu	shapesize	fillcolorst)selfr   s     ,lib/python3.13/turtledemo/sorting_animate.pyr   Block.__init__   sK    	He<	tcz3*w	    c                 &    U R                  S5        g )Nredr   r   s    r   glow
Block.glow    s    ur   c                 &    U R                  S5        g )Nr   r   r   s    r   unglowBlock.unglow#   s    wr   c                 8    SR                  U R                  5      $ )NzBlock size: {0})formatr   r   s    r   __repr__Block.__repr__&   s     ''		22r   )r   N)	__name__
__module____qualname____firstlineno__r   r   r   r#   __static_attributes__ r   r   r   r      s     3r   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
Shelf*   c                     Xl         SU l        g)z.create a shelf. y is y-position of first blockijN)yx)r   r/   s     r   r   Shelf.__init__,   s    r   c                     UR                  5       u  n  nUS-  S-  nUR                  U R                  U-   5        UR                  U R                  S[        U 5      -  -   5        U R                  U5        g )Nr      "   )r   setyr/   setxr0   lenappend)r   dwidth_y_offsets        r   push
Shelf.push1   s]    kkmq!19r>	tvv !	tvvSY&'Ar   c                 f    XS   H)  nUR                  5       u  p4UR                  US-
  5        M+     g Nr4   posr6   r   ibxposr;   s        r   _close_gap_from_iShelf._close_gap_from_i9   -    bAeegGDFF4"9 r   c                 f    XS   H)  nUR                  5       u  p4UR                  US-   5        M+     g r@   rA   rC   s        r   _open_gap_from_iShelf._open_gap_from_i>   rI   r   c                     [         R                  X5      nUR                  5         UR                  S5        U R	                  U5        U$ )N   )listpopr   r5   rG   )r   keyrE   s      r   rP   	Shelf.popC   s7    HHT		ss#r   c                 (   U R                  U5        [        R                  XU5        UR                  U R                  SU-  -   5        UR                  5       u  n  nUS-  S-  nUR                  U R                  U-   5        UR                  5         g )Nr4   r   r3   )	rK   rO   insertr6   r0   r   r5   r/   r   )r   rQ   rE   r:   r;   r<   s         r   rT   Shelf.insertJ   ss    c"Dq!	tvvS !kkmq!19r>	tvv !	
r   )r0   r/   N)r%   r&   r'   r(   r   r=   rG   rK   rP   rT   r)   r*   r   r   r,   r,   *   s     


r   r,   c                 .   [        U 5      n[        SU5       Hz  nUnUS:  aO  X   R                  XS-
     R                  :  a.  US-
  nUS:  a#  X   R                  XS-
     R                  :  a  M.  U R                  X0R	                  U5      5        M|     g )N   r   r7   ranger   rT   rP   )shelflengthrD   holes       r   isortr]   T   s    ZF1fQh58==5?+?+??!8D Qh58==5?+?+??T99Q<(	 
 r   c                    [        U 5      n[        SUS-
  5       Hd  nUn[        US-   U5       H%  nX   R                  X   R                  :  d  M#  UnM'     X2:w  d  MD  U R                  X R	                  U5      5        Mf     g )Nr   rW   rX   )rZ   r[   jiminrD   s        r   ssortra   ]   sp    ZF1fqj!q1uf%Ax}}u{/// & 9LLIIdO, "r   c                 <   X   nU R                  X R                  U5      5        Un[        X5       HF  nX   R                  UR                  :  d  M!  U R                  XPR                  U5      5        US-   nMH     U R                  XPR                  U5      5        U$ NrW   )rT   rP   rY   r   )rZ   leftrightpivot_indexpivotstore_indexrD   s          r   	partitionri   g   s    E	LL		+./K48==5::%LLiil3%/K   
LLii./r   c                 h    X:  a-  Un[        XX#5      n[        XUS-
  5        [        XS-   U5        g g rc   )ri   qsort)rZ   rd   re   rf   pivot_new_indexs        r   rk   rk   r   s;    |#EDe?Q./eq(%0	 r   c                     [        5         [        5         [        [        S5      5      n [        R
                  " U 5        [        U 5       Hj  u  p[        U[        [        5      5       HH  n[        U   R                  US-   :X  d  M  [        R                  U[        R                  U5      5        MJ     Ml     [        [        5        [        [        SS9  [        5         g )N
   rW   line)disable_keysclearrO   rY   randomshuffle	enumerater7   sr   rT   rP   	show_textinstructions1instructions2enable_keys)targetrD   tr_   s       r   	randomizer}   y   s    N	G%)_F
NN6&!q#a&!AtyyAE!AEE!H% " " mm!$Mr   c                 B    SU-  n[        SSU-
  5        [        U SSS9  g )Nr3   r   icenter)Courier   bold)alignfont)gotowrite)textrp   s     r   rw   rw      s&    9D4$;	$h%<=r   c                      [        5         [        5         [        S5        [        [        5        [        5         [        [
        5        [        [        SS9  [        5         g )NzSelection SortrW   ro   )rq   rr   rw   ra   rv   rx   ry   rz   r*   r   r   start_ssortr      8    N	G	!H	Gmm!$Mr   c                      [        5         [        5         [        S5        [        [        5        [        5         [        [
        5        [        [        SS9  [        5         g )NzInsertion SortrW   ro   )rq   rr   rw   r]   rv   rx   ry   rz   r*   r   r   start_isortr      r   r   c                      [        5         [        5         [        S5        [        [        S[        [        5      S-
  5        [        5         [        [        5        [        [        SS9  [        5         g )N	Quicksortr   rW   ro   )	rq   rr   rw   rk   rv   r7   rx   ry   rz   r*   r   r   start_qsortr      sD    N	Gk	!QA
	Gmm!$Mr   c                  l    [        S5      qSn U  H!  n[        R                  [        U5      5        M#     g )Ni8)
   r      	   rW      rn            )r,   rv   r=   r   )valsrD   s     r   
init_shelfr      s*    dA*D	uQx r   c                  d    [        S S5        [        S S5        [        S S5        [        S S5        g )Nrv   rD   qr)onkeyr*   r   r   rq   rq      s*    	$	$	$	$r   c                      [        [        S5        [        [        S5        [        [        S5        [        [        S5        [        [
        S5        g )NrD   rv   r   r   space)r   r   r   r   r}   byer*   r   r   rz   rz      s4    	+s	+s	+s	)S	#wr   c                      [        5       R                  5         [        5         [        5         [	        5         [        [        5        [        [        SS9  [        5         [        5         g)NrW   ro   	EVENTLOOP)
	getscreenclearscreenhtpenupr   rw   rx   ry   rz   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__turtlers   r   r   rO   r,   r]   ra   ri   rk   r}   rw   r   r   r   r   rq   rz   r   rx   ry   r%   msgmainloopr*   r   r   <module>r      s      3F 3((D (T-	1>
 T2Z
&CJ r   