首页 > 解决方案 > 迭代快速排序步骤 - 乌龟中的可视化

问题描述

我正在Python3Turtle. 它可视化quicksort算法。我想改进我的应用程序,这样我就可以通过等待用户的点击来展示算法的每一步。

input()在算法中间尝试了简单的方法,但这需要控制台在应用程序窗口进入后台时处于活动状态。现在我正在尝试使用onscreenclick(),但是当算法到达某个点时,它会停止监听鼠标事件。

我该怎么做?有没有其他方法可以做到这一点?

def partition(array, start, end):                  
    global clickedFlag
    pivotIndex = start                                  
    pivotValue = array[end]                             
    for i in range(start, len(array) - 1):              
        if array[i] < pivotValue:                       
            if clickedFlag:
                swap(array, i, pivotIndex)                  
                pivotIndex += 1                            
                clickedFlag = False                                     
            else:
                while clickedFlag == False:
                    onscreenclick(clicked)
                    listen()
    swap(array, pivotIndex, end)                        
    return pivotIndex

def clicked(x,y):
    global clickedFlag
    clickedFlag = True
    return clickedFlag

标签: pythonrecursionquicksortturtle-graphics

解决方案


我建议您将“等待点击”逻辑集中在一个地方,而不是将其与其余的排序逻辑混合。

例如

def waitForClick():
    global clickedFlag
    clickedFlag = False
    while clickedFlag == False:
         onscreenclick(clicked)
         listen()

...
    if array[i] < pivotValue: 
        waitForClick()
        swap(array, i, pivotIndex)                  
        pivotIndex += 1                            
...

推荐阅读