插入排序的Python代码
import tkinter as tk
import random
import timeclass InsertionSortVisualizer : def __init__ ( self, root, canvas_width= 800 , canvas_height= 400 , num_bars= 10 ) : self. root = rootself. canvas_width = canvas_widthself. canvas_height = canvas_heightself. num_bars = num_barsself. bar_width = canvas_width // num_barsself. data = [ random. randint( 1 , canvas_height) for _ in range ( num_bars) ] self. canvas = tk. Canvas( root, width= canvas_width, height= canvas_height) self. canvas. pack( ) self. draw_data( ) def draw_data ( self, colored_index= None ) : self. canvas. delete( "all" ) for i, value in enumerate ( self. data) : if colored_index is not None and i in colored_index: color = "red" else : color = "blue" self. canvas. create_rectangle( i * self. bar_width, self. canvas_height - value, ( i + 1 ) * self. bar_width, self. canvas_height, fill= color) self. root. update_idletasks( ) def insertion_sort ( self) : for i in range ( 1 , len ( self. data) ) : key = self. data[ i] self. draw_data( [ i] ) j = i - 1 while j >= 0 and key < self. data[ j] : self. data[ j + 1 ] = self. data[ j] j -= 1 self. data[ j + 1 ] = keyself. draw_data( [ j + 1 ] ) time. sleep( 0.5 ) self. draw_data( ) def main ( ) : root = tk. Tk( ) root. title( "插入排序" ) app = InsertionSortVisualizer( root) tk. Button( root, text= "开始" , command= app. insertion_sort) . pack( ) root. mainloop( ) if __name__ == "__main__" : main( )
运行结果