Da die Dichotomie in der Algorithmusklasse geschrieben wurde, wurde sie in Python3 implementiert. Da das untere Array zerstört wird (Elemente werden gelöscht), ist es besser, die Daten zu kopieren und auszuführen, wenn sie tatsächlich verwendet werden, oder die Bedingungen mithilfe von Variablen wie links und rechts zu ändern. damit. Ich dachte, es wäre bequemer, es zu einer Funktion zu machen, aber Python kann mit in durchsucht werden, und ich habe es nur in der Praxis des Algorithmus codiert, also ist es gut gemacht, ja.
Bereiten Sie eine entsprechende Liste vor und sortieren Sie sie in aufsteigender Reihenfolge. Speichern Sie die Nummer, die Sie finden möchten, in sa_num. Verwenden Sie cnt, um zu zählen, wie oft Sie während der Suche verarbeitet haben. Ende wird als Endbedingung verwendet und Erfolg wird als Erfolgsflagge verwendet. Wiederholen, wenn das Ende 0 ist Wenn das Element 1 ist, ist es das Ende, wenn nur dieses Element untersucht wird. Setzen Sie also end = 1 und markieren Sie es. Wenn nicht, erhalten Sie den Median. Wenn der Medianwert und der Wert, nach dem Sie suchen möchten, nicht übereinstimmen, werden die Größe des Medianwerts und der Wert, nach dem Sie suchen möchten, verglichen. Wenn der Medianwert größer ist, liegt der Wert, den Sie suchen möchten, zwischen 0 und Index. Sie benötigen also nicht die rechte Seite des Arrays (vom Index bis zum Ende). Löschen Sie ihn daher mit einem Slice. Im Gegenteil, wenn es kleiner als der Medianwert ist, wird die linke Seite gelöscht. Wenn die Anzahl der Elemente im Array 1 wird, nehmen Sie die Elemente heraus und vergleichen Sie sie mit dem numerischen Wert, den Sie suchen möchten. Wenn Sie die gesuchte Nummer nicht finden können, sind Sie fertig.
lis = [15,23,25,601,65,87,9,103,15,30,11,13]
lis.sort()
sa_num = 25
cnt = 0
end = 0
suc = 0
while end == 0:
cnt += 1
print(lis)
if len(lis) != 1:
index = int(len(lis) / 2)
if lis[index] == sa_num:
print('suc' + str(sa_num))
end = 1
elif lis[index] > sa_num:
del lis[index:]
elif lis[index] < sa_num:
del lis[0:index]
else:
if lis[0] == sa_num:
print(sa_num)
end = 1
else:
print('Konnte nicht gefunden werden.')
suc = 1
end = 1
if suc != 1:
print(str(cnt) + 'Gefunden in der zweiten Suche.')
else:
print(str(cnt) + 'Ich habe mehrmals gesucht, konnte es aber nicht finden.')
Recommended Posts