Я работаю над небольшим проектом под названием:
«Симулятор, графически показывающий линейный и двоичный поиск. Этот симулятор просит вас выбрать размер массива, затем графически это количество блоков, а затем вы можете вставить данные в эти блоки. Он позволяет вставлять данные только в первый индекс сначала, затем он позволяет второму блоку вставлять данные и т. д. Затем он спрашивает пользователя, какие данные хотят найти, и графически показывает процесс поиска и, наконец, отображает результат. "
Я написал функцию для бинарного поиска, но она показывает только результат Mid и работает должным образом. Только, пожалуйста, помогите мне, и Помогите мне показать процесс Алгоритма, он меняет цвет метки, элементом которой является бинарный поиск. проверка.
import tkinter as tk
root=tk.Tk()
root.title("Linear & Binary Search")
root.geometry("1200x600")
box_list = [] # Create list of Entrys
#Functions
def binarySearch():
index_list = []
global snum, box_list
x = snum.get()
l=len(box_list)
r=len(box_list)-1
if r >= l:
mid = l + (r - l)/2
if box_list[mid] == x:
index_list.append(mid)
elif box_list[mid] > x:
return binarySearch(box_list, l, mid-1, x)
else:
return binarySearch(box_list, mid+1, r, x)
#Print Area
temp0=tk.Frame(root)
temp0.pack()
tk.Label(temp0,text="\n").pack()
Result=tk.Frame(root)
Result.pack()
tk.Label(Result,text="Searched for ",
font="Arial 10 bold",fg="blue",pady="10",
anchor="w").grid(row=0,column=0)
tk.Label(Result, text=snum.get(),
font="Arial 12 bold",bg="green",
fg="white",bd="5",justify="left",
padx="25",pady="25",
relief="groove").grid(row=0,column=1)
tk.Label(Result,text=" Result ",
font="Arial 10 bold",fg="blue",
pady="10",anchor="w").grid(row=0,column=2)
print(index_list)
tk.Label(Result,text=index_list,
font="Arial 12 bold",bg="green",
fg="white",bd="5",justify="left",
padx="25",pady="25",
relief="groove").grid(row=0,column=3)
def ApplytoLabel():
global snum, box_list
xx=size.get()
for i in range(xx):
if box_list[i].cget('state') == 'normal':
element = box_list[i].get() # Get value from corresponding Entry
ArrayLabel=tk.Label(OutputArray,text=element,
font="Arial 12 bold",
bg="red",fg="white",
bd="5",justify="left",
padx="25",pady="25",
relief="groove")
ArrayLabel.pack(side="left")
box_list[i].configure(state='disabled')
try:
box_list[i+1].configure(state='normal')
except IndexError: pass
break
def Boxes():
xx=size.get()
for i in range(xx):
box=tk.Entry(InputArray,font="Arial 10 bold",bd="5",width="5",state='disabled' if i else 'normal')
box.pack(side="left")
box_list.append(box)
ApplytoLabel1=tk.Button(InputArray,text="Submit To Array",command=ApplytoLabel).pack()
#Size of Array
Array = tk.Frame(root)
Array.pack()
text1=tk.Label(Array,text="Enter the Size of Array:",
font="Arial 10 bold",fg="blue",
pady="10",anchor="w").grid(row=0,column=0)
size=tk.IntVar()
ArraySize=tk.Entry(Array,textvariable=size,
font="Arial 10 bold",
bd="5").grid(row=0,column=1,sticky="w")
SizeofArray=tk.Button(Array,text="Submit",
command=Boxes).grid(row=0,column=2,sticky="w")
#Search Element
text2=tk.Label(Array,text="Number to search:",
font="Arial 10 bold",fg="blue",pady="10",anchor="w")
text2.grid(row=2,column=0)
snum = tk.IntVar()
SearchNum=tk.Entry(Array,textvariable=snum,font="Arial 10 bold",bd="5")
SearchNum.grid(row=2,column=1)
BinarySearch=tk.Button(Array,text="Binary Search",command=binarySearch)
BinarySearch.grid(row=2,column=3)
#Search Element End
temp0=tk.Frame(root)
temp0.pack()
Space=tk.Label(temp0,text="\n")
Space.pack()
InputArray=tk.Frame(root)
InputArray.pack()
temp0=tk.Frame(root)
temp0.pack()
tk.Label(temp0,text="\n \n").pack()
OutputArray=tk.Frame(root)
OutputArray.pack()
root.mainloop()