在Python中可视化合并排序
我想用python制作一个mergesort可视化工具。我想使用海龟模块。要绘制单个条形图,我使用函数draw_-bar,要绘制整个阵列,则使用函数draw_-bar。这是密码在Python中可视化合并排序,python,mergesort,Python,Mergesort,我想用python制作一个mergesort可视化工具。我想使用海龟模块。要绘制单个条形图,我使用函数draw_-bar,要绘制整个阵列,则使用函数draw_-bar。这是密码 def draw_bar(x,y,w,h): turtle.up() turtle.goto(x,y) turtle.seth(0) turtle.down() turtle.begin_fill() turtle.fd(w) turtle.left(90)
def draw_bar(x,y,w,h):
turtle.up()
turtle.goto(x,y)
turtle.seth(0)
turtle.down()
turtle.begin_fill()
turtle.fd(w)
turtle.left(90)
turtle.fd(h)
turtle.left(90)
turtle.fd(w)
turtle.left(90)
turtle.fd(h)
turtle.left(90)
turtle.end_fill()
def draw_bars(v,currenti=-1,currentj=-1,M=500):
turtle.clear()
x = -250
n = len(v)
w = 500/n
r = 500/M
for i in range(n):
if i == currenti: turtle.fillcolor('red')
elif i == currentj: turtle.fillcolor('blue')
else: turtle.fillcolor('gray')
draw_bar(x,-250,w,v[i]*r)
x += w
screen.update()
现在我有了这个合并排序算法:
def mergeSort(arr):
if len(arr) > 1:
mid = len(arr)//2
L = arr[:mid]
R = arr[mid:]
mergeSort(L)
mergeSort(R)
i=0
j=0
k=0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
def合并排序(arr):
如果len(arr)>1:
mid=len(arr)//2
L=arr[:中间]
R=arr[mid:]
合并排序(L)
合并排序(R)
i=0
j=0
k=0
而i
现在我需要知道如何放置刷新可视化列表的代码部分。您需要在每次数组更改时更新您的grafics,意思是在每次
arr[k]=L[j]
但是,在当前的实现中很难做到这一点,因为递归函数没有关于它操作的较大列表的哪一部分的信息
我建议更改函数,以便始终将completat数组以及开始索引和要处理的部分的长度传递给它:
def mergeSort(arr, start, length):
if length > 1:
mergeSort(arr, start, length/2)
mergeSort(arr, start+length/2, length/2)
etc.
然后,每次阵列发生变化时,您都可以调用牵引杆
编辑:
完整代码如下所示:
def mergeSort(arr, start, length):
if length > 2:
mergeSort(arr, start, int(length/2))
mergeSort(arr, start+int(length/2), int(length/2))
print(start+int(length/2))
L = arr[start:start+int(length/2)]
R = arr[start+int(length/2):start+length]
i=0
j=0
k=0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[start+k] = L[i]
draw_bars(myarray)
i += 1
else:
arr[start+k] = R[j]
draw_bars(myarray)
j += 1
k += 1
while i < len(L):
arr[start+k] = L[i]
draw_bars(myarray)
i += 1
k += 1
while j < len(R):
arr[start+k] = R[j]
draw_bars(myarray)
j += 1
k += 1
myarr = [2,345,2456,3456,56,34,5,78,34,5423,26487,324,1,3,4,5]
draw_bars(myarray)
mergeSort(myarr, 0 ,len(myarr))
print(myarr)
def合并排序(arr、start、length):
如果长度>2:
合并排序(arr、start、int(长度/2))
合并排序(arr、start+int(长度/2)、int(长度/2))
打印(起始+整数(长度/2))
L=arr[start:start+int(长度/2)]
R=arr[start+int(长度/2):start+length]
i=0
j=0
k=0
而i
我不知道你是什么意思。你能举个例子或者展示一个伪代码吗?ThanksI很快实现了该功能。