【发布时间】:2021-12-30 14:00:01
【问题描述】:
我正在为快速排序算法制作一个可视化表示工具,我正在使用一个一维数组,它是一个随机范围的索引,填充了一个随机范围的值。我相信我在运行时用来填充这个数组的方法导致了这个问题,因为我注意到它发生在大约 50% 的时间,但我无法确定索引值之间的任何因果关系/相关性,或者将返回此错误的数组的长度:
canvas.create_line(masterArray[x] + 20 ,1 ,masterArray[x]+ 20, masterArray[currValue] * 1 + 100)
IndexError: list index out of range
我将附上下面的代码。我的理论是,一些正在填充的值没有为要绘制的线提供足够的信息,即:x start、y start、x end 和 y end。不幸的是,我无法用我当前的系统想到任何不会提供此信息的值。如果有人有任何想法,我真的很感激朝着正确的方向轻推。
from tkinter import Tk, Canvas, Frame, BOTH, W
import random
import numpy as np
randInt = random.randint(10, 100)
masterArray = [random.randint(10,75) for _ in range(randInt)]
print(randInt)
print(masterArray)
class Example(Frame):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.master.title("Lines")
self.pack(fill=BOTH, expand=1)
sortedArr =quicksort(masterArray)
canvas = Canvas(self)
##canvas.create_text(100,100, anchor=W , font ="Purisa", text = len(masterArray))
for x in masterArray:
currValue = masterArray[x]
canvas.create_line(masterArray[x] + 20 ,1 ,masterArray[x]+ 20, masterArray[currValue] * 1 + 100)
for x in sortedArr:
currValue = sortedArr[x]
canvas.create_line(sortedArr[x] + 20 ,500,sortedArr[x]+ 20, 500 - sortedArr[currValue] - 100 )
##canvas.create_line(x start,ystart ,x end, y end)
canvas.create_text(125, 250, anchor=W, font="Purisa",text = "The total number of elements is: " + str(len(masterArray)))
##canvas.create_line(15, 25, 200, 25)
##canvas.create_line(300, 35, 300, 200, dash=(4, 2))
## canvas.create_line(55, 85, 155, 85, 105, 180, 55, 85)
canvas.pack(fill=BOTH, expand=1)
def quicksort(arr):
elements = len(arr)
if elements < 2:
return arr
current_pos = 0
for i in range(1, elements):
if arr[i] <= arr[0]:
current_pos += 1
temp = arr[i]
arr[i] = arr[current_pos]
arr[current_pos] = temp
temp = arr[0]
arr[0] = arr[current_pos]
arr[current_pos] = temp
left = quicksort(arr[0:current_pos])
right = quicksort(arr[current_pos+1:elements])
arr = left +[arr[current_pos]] + right
return arr
def main():
root = Tk()
ex = Example()
root.geometry("500x500+300+300")
root.mainloop()
if __name__ == '__main__':
main()
我尝试使用随机值参数来查看是否有任何改进,但到目前为止还没有任何运气。我很感激任何帮助。谢谢。
【问题讨论】:
-
如果你使用调试器会发生什么
标签: python arrays indexing quicksort