So schrieb ich einen binären Suchalgorithmus, noch, wenn ich Testlauf es funktioniert nicht perfekt.Binärsuchalgorithmus funktioniert nicht
Hier ist der Code
def binarySearch(lst, target):
low = 0
high = len(lst)-1
while high >= low:
mid = (high + low)//2
if target < lst[mid]:
high = mid - 1
elif target > lst[mid]:
low = mid + 1
else:
return mid
return (-1 * (mid+1))
abd hier der Code ist die Funktion
lst_test = [3, 4, 6, 7]
target_values = [1, 3, 5, 8]
for t in target_values:
i = binarySearch(lst_test, t)
if (i < 0):
print("In", lst_test, t, "is going to be inserted at index",-1*(i+1))
lst_test.insert((i+1)*-1, t)
else:
print("In", lst_test, t, "was found at index", i)
print("The final list is:", lst_test)
Das Problem dieser für den Aufruf ist, möchte ich Liste target_values in die lst richtigen Reihenfolge, wenn ich tatsächlich hinzufügen führen sie die Funktion gibt es
In [3, 4, 6, 7] 1 is going to be inserted at index 0
In [1, 3, 4, 6, 7] 3 was found at index 1
In [1, 3, 4, 6, 7] 5 is going to be inserted at index 3
In [1, 3, 4, 5, 6, 7] 8 is going to be inserted at index 5
The final list is: [1, 3, 4, 5, 6, 8, 7]
Welche seltsam ist, seine Arbeit doch nur f ails im letzten Teil des Anrufs gibt es eine Möglichkeit, dieses Problem zu beheben? Die endgültige Liste sollte [1,3,4,5,6,7,8] sein.
Wie angefordert, verfolgte ich meinen binären Suchalgorithmus, seine ruhige schlechte Qualität. Ich hoffe, das würde helfen
Mid point is: 1
target value is smaller than a mid point
Mid point is: 0
target value is smaller than a mid point
In [3, 4, 6, 7] 1 is going to be inserted at index 0
Mid point is: 2
target value is smaller than a mid point
Mid point is: 0
target value is larger than a mid point
Mid point is: 1
Found the index location at 1
In [1, 3, 4, 6, 7] 3 was found at index 1
Mid point is: 2
target value is larger than a mid point
Mid point is: 3
target value is smaller than a mid point
In [1, 3, 4, 6, 7] 5 is going to be inserted at index 3
Mid point is: 2
target value is larger than a mid point
Mid point is: 4
target value is larger than a mid point
Mid point is: 5
target value is larger than a mid point
In [1, 3, 4, 5, 6, 7] 8 is going to be inserted at index 5
The final list is: [1, 3, 4, 5, 6, 8, 7]
Sie haben einen netten Job gemacht, der die aufrufende Reihenfolge verfolgt; Kannst du das auf die binäre Suchroutine anwenden? Mit dem Grad der Sorgfalt, den Sie gezeigt haben, wette ich, dass 2 oder 3 Druckanweisungen darin den Fehler zeigen würden. – Prune
Randbemerkung: Sie kennen [das 'Halbierung' Modul] (https://docs.python.org/3/library/bisect.html), richtig? Wenn das eine Lernübung ist, viel Spaß, aber für alles andere, benutze die mitgelieferten Batterien; Sie sind schneller und flexibler als alles, was Sie wahrscheinlich selbst implementieren werden. – ShadowRanger