Server IP : 103.119.228.120 / Your IP : 3.15.7.212 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib/mysqlsh/lib/python3.9/turtledemo/ |
Upload File : |
#!/usr/bin/env python3 """ 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 --------------------------------------- """ from turtle import * import random class Block(Turtle): def __init__(self, size): self.size = size Turtle.__init__(self, shape="square", visible=False) self.pu() self.shapesize(size * 1.5, 1.5, 2) # square-->rectangle self.fillcolor("black") self.st() def glow(self): self.fillcolor("red") def unglow(self): self.fillcolor("black") def __repr__(self): return "Block size: {0}".format(self.size) class Shelf(list): def __init__(self, y): "create a shelf. y is y-position of first block" self.y = y self.x = -150 def push(self, d): width, _, _ = d.shapesize() # align blocks by the bottom edge y_offset = width / 2 * 20 d.sety(self.y + y_offset) d.setx(self.x + 34 * len(self)) self.append(d) def _close_gap_from_i(self, i): for b in self[i:]: xpos, _ = b.pos() b.setx(xpos - 34) def _open_gap_from_i(self, i): for b in self[i:]: xpos, _ = b.pos() b.setx(xpos + 34) def pop(self, key): b = list.pop(self, key) b.glow() b.sety(200) self._close_gap_from_i(key) return b def insert(self, key, b): self._open_gap_from_i(key) list.insert(self, key, b) b.setx(self.x + 34 * key) width, _, _ = b.shapesize() # align blocks by the bottom edge y_offset = width / 2 * 20 b.sety(self.y + y_offset) b.unglow() def isort(shelf): length = len(shelf) for i in range(1, length): hole = i while hole > 0 and shelf[i].size < shelf[hole - 1].size: hole = hole - 1 shelf.insert(hole, shelf.pop(i)) return def ssort(shelf): length = len(shelf) for j in range(0, length - 1): imin = j for i in range(j + 1, length): if shelf[i].size < shelf[imin].size: imin = i if imin != j: shelf.insert(j, shelf.pop(imin)) def partition(shelf, left, right, pivot_index): pivot = shelf[pivot_index] shelf.insert(right, shelf.pop(pivot_index)) store_index = left for i in range(left, right): # range is non-inclusive of ending value if shelf[i].size < pivot.size: shelf.insert(store_index, shelf.pop(i)) store_index = store_index + 1 shelf.insert(store_index, shelf.pop(right)) # move pivot to correct position return store_index def qsort(shelf, left, right): if left < right: pivot_index = left pivot_new_index = partition(shelf, left, right, pivot_index) qsort(shelf, left, pivot_new_index - 1) qsort(shelf, pivot_new_index + 1, right) def randomize(): disable_keys() clear() target = list(range(10)) random.shuffle(target) for i, t in enumerate(target): for j in range(i, len(s)): if s[j].size == t + 1: s.insert(i, s.pop(j)) show_text(instructions1) show_text(instructions2, line=1) enable_keys() def show_text(text, line=0): line = 20 * line goto(0,-250 - line) write(text, align="center", font=("Courier", 16, "bold")) def start_ssort(): disable_keys() clear() show_text("Selection Sort") ssort(s) clear() show_text(instructions1) show_text(instructions2, line=1) enable_keys() def start_isort(): disable_keys() clear() show_text("Insertion Sort") isort(s) clear() show_text(instructions1) show_text(instructions2, line=1) enable_keys() def start_qsort(): disable_keys() clear() show_text("Quicksort") qsort(s, 0, len(s) - 1) clear() show_text(instructions1) show_text(instructions2, line=1) enable_keys() def init_shelf(): global s s = Shelf(-200) vals = (4, 2, 8, 9, 1, 5, 10, 3, 7, 6) for i in vals: s.push(Block(i)) def disable_keys(): onkey(None, "s") onkey(None, "i") onkey(None, "q") onkey(None, "r") def enable_keys(): onkey(start_isort, "i") onkey(start_ssort, "s") onkey(start_qsort, "q") onkey(randomize, "r") onkey(bye, "space") def main(): getscreen().clearscreen() ht(); penup() init_shelf() show_text(instructions1) show_text(instructions2, line=1) enable_keys() listen() return "EVENTLOOP" instructions1 = "press i for insertion sort, s for selection sort, q for quicksort" instructions2 = "spacebar to quit, r to randomize" if __name__=="__main__": msg = main() mainloop()