U ©Î.e¥ã@s¾dZddlTddlZGdd„deƒZGdd„deƒZdd „Zd d „Zd d „Z dd„Z dd„Z d%dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"Zd#Zed$krºeƒZeƒdS)&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,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚBlockcCsF||_tj|ddd�| ¡| |ddd¡| d¡| ¡dS)NZsquareF)ÚshapeZvisiblegø?éÚblack)ÚsizeÚTurtleÚ__init__ZpuÚ shapesizeÚ fillcolorÚst)Úselfr©rú2/usr/lib64/python3.8/turtledemo/sorting_animate.pyr s  zBlock.__init__cCs| d¡dS)NZred©r ©r rrrÚglowsz Block.glowcCs| d¡dS)NrrrrrrÚunglow"sz Block.unglowcCs d |j¡S)NzBlock size: {0})ÚformatrrrrrÚ__repr__%szBlock.__repr__N)Ú__name__Ú __module__Ú __qualname__r rrrrrrrrsrc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚShelfcCs||_d|_dS)z.create a shelf. y is y-position of first blockijÿÿÿN)ÚyÚx)r rrrrr +szShelf.__init__cCsP| ¡\}}}|dd}| |j|¡| |jdt|ƒ¡| |¡dS)Nréé")r ÚsetyrÚsetxrÚlenÚappend)r ÚdÚwidthÚ_Úy_offsetrrrÚpush0s  z Shelf.pushcCs0||d…D]}| ¡\}}| |d¡q dS©Nr©Úposr©r ÚiÚbZxposr$rrrÚ_close_gap_from_i8s zShelf._close_gap_from_icCs0||d…D]}| ¡\}}| |d¡q dSr'r(r*rrrÚ_open_gap_from_i=s zShelf._open_gap_from_icCs,t ||¡}| ¡| d¡| |¡|S)NéÈ)ÚlistÚpoprrr-)r Úkeyr,rrrr1Bs    z Shelf.popcCsb| |¡t |||¡| |jd|¡| ¡\}}}|dd}| |j|¡| ¡dS)Nrrr) r.r0Úinsertrrr rrr)r r2r,r#r$r%rrrr3Is  z Shelf.insertN) rrrr r&r-r.r1r3rrrrr)s rcCs\t|ƒ}td|ƒD]D}|}|dkrD||j||djkrD|d}q| || |¡¡qdS)Nér©r Úrangerr3r1)ÚshelfÚlengthr+ZholerrrÚisortSs  r9cCsjt|ƒ}td|dƒD]N}|}t|d|ƒD]}||j||jkr,|}q,||kr| || |¡¡qdS)Nrr4r5)r7r8ÚjZiminr+rrrÚssort\sr;cCsn||}| || |¡¡|}t||ƒD].}||j|jkr(| || |¡¡|d}q(| || |¡¡|S©Nr4)r3r1r6r)r7ÚleftÚrightÚ pivot_indexZpivotZ store_indexr+rrrÚ partitionfs r@cCs>||kr:|}t||||ƒ}t|||dƒt||d|ƒdSr<)r@Úqsort)r7r=r>r?Zpivot_new_indexrrrrAqs rAcCsŠtƒtƒttdƒƒ}t |¡t|ƒD]@\}}t|ttƒƒD](}t|j |dkr@t  |t  |¡¡q@q*t t ƒt tdd�tƒdS)Né r4©Úline)Ú disable_keysÚclearr0r6ÚrandomZshuffleÚ enumerater Úsrr3r1Ú show_textÚ instructions1Ú instructions2Ú enable_keys)Útargetr+Útr:rrrÚ randomizexs   rPcCs(d|}tdd|ƒt|ddd�dS)NrriÿÿÿÚcenter)ZCourieréZbold)ZalignZfont)ZgotoÚwrite)ÚtextrDrrrrJ…srJcCs@tƒtƒtdƒttƒtƒttƒttdd�tƒdS)NzSelection Sortr4rC)rErFrJr;rIrKrLrMrrrrÚ start_ssortŠs rUcCs@tƒtƒtdƒttƒtƒttƒttdd�tƒdS)NzInsertion Sortr4rC)rErFrJr9rIrKrLrMrrrrÚ start_isort”s rVcCsLtƒtƒtdƒttdttƒdƒtƒttƒttdd�tƒdS)NZ Quicksortrr4rC) rErFrJrArIr rKrLrMrrrrÚ start_qsortžs rWcCs(tdƒad}|D]}t t|ƒ¡qdS)Ni8ÿÿÿ) éréé r4érBééé)rrIr&r)Zvalsr+rrrÚ init_shelf¨sr_cCs,tddƒtddƒtddƒtddƒdS)NrIr+ÚqÚr)ÚonkeyrrrrrE¯s   rEcCs6ttdƒttdƒttdƒttdƒttdƒdS)Nr+rIr`raZspace)rbrVrUrWrPZbyerrrrrMµs     rMcCs@tƒ ¡tƒtƒtƒttƒttdd�tƒt ƒdS)Nr4rCZ EVENTLOOP) Z getscreenZ clearscreenZhtZpenupr_rJrKrLrMZlistenrrrrÚmain¼s  rczApress i for insertion sort, s for selection sort, q for quicksortz spacebar to quit, r to randomizeÚ__main__)r)Ú__doc__ZturtlerGrrr0rr9r;r@rArPrJrUrVrWr_rErMrcrKrLrÚmsgZmainlooprrrrÚs,*