diff --git a/code/golang/internal/algorithms/search/binary/binary.go b/code/golang/internal/algorithms/search/binary/binary.go index e51a0ef..fff9577 100644 --- a/code/golang/internal/algorithms/search/binary/binary.go +++ b/code/golang/internal/algorithms/search/binary/binary.go @@ -28,24 +28,27 @@ Outputs: Position von x in L, sonst −1 wenn x nicht in L. */ func BinarySearch(L []int, x int) int { if len(L) == 0 { - logging.Debug("x nicht in L") + logging.Debug("x nicht in L.") return -1 } metrics.AddTimeCost() m := int(len(L) / 2) if L[m] == x { - logging.Debug("x in Position m gefunden") + logging.Debug("Suche in %v .. %v; m = %v; L[m] = x ==> Element gefunden.", 0, len(L)-1, m) return m + } else if len(L) == 1 { + logging.Debug("L enthält 1 Element; L[m] =/= x; ==> x nicht in L.") + return -1 } else if x < L[m] { - logging.Debug("Suche in linker Hälfte fortsetzen.") + logging.Debug("Suche in %v .. %v; m = %v; L[m] = %v > x ==> Suche in linker Hälfte fortsetzen.", 0, len(L)-1, m, L[m]) index := BinarySearch(L[:m], x) return index } else { // } else if x > L[m] { - logging.Debug("Suche in rechter Hälfte fortsetzen.") + logging.Debug("Suche in %v .. %v; m = %v; L[m] = %v < x ==> Suche in rechter Hälfte fortsetzen.", 0, len(L)-1, m, L[m]) index := BinarySearch(L[m+1:], x) - if index >= 0 { - index += (m + 1) // NOTE: muss Indexwert kompensieren + if index == -1 { + return -1 // wenn nicht gefunden } - return index + return index + (m + 1) // NOTE: muss Indexwert kompensieren } } diff --git a/code/golang/internal/algorithms/search/jump/jump.go b/code/golang/internal/algorithms/search/jump/jump.go index 6ea0746..674e5b7 100644 --- a/code/golang/internal/algorithms/search/jump/jump.go +++ b/code/golang/internal/algorithms/search/jump/jump.go @@ -44,10 +44,10 @@ func JumpSearchLinear(L []int, x int, m int) int { if x < elementAfterBlock { logging.Debug("Element muss sich im Block [%[1]v, %[2]v) befinden.", i0, i1) index := sequential.SequentialSearch(block, x) - if index >= 0 { - index += i0 // NOTE: muss wegen Offset kompensieren + if index == -1 { + return -1 // wenn nicht gefunden } - return index + return index + i0 // NOTE: muss wegen Offset kompensieren } logging.Debug("Element befindet sich nicht im Block [%[1]v, %[2]v).", i0, i1) i0 = i1 @@ -83,10 +83,10 @@ func JumpSearchExponentiell(L []int, x int) int { if x < elementAfterBlock { logging.Debug("Element muss sich im Block [%[1]v, %[2]v) befinden.", i0, i1) index := sequential.SequentialSearch(block, x) - if index >= 0 { - index += i0 // NOTE: muss wegen Offset kompensieren + if index == -1 { + return -1 // wenn nicht gefunden } - return index + return index + i0 // NOTE: muss wegen Offset kompensieren } logging.Debug("Element befindet sich nicht im Block [%[1]v, %[2]v).", i0, i1) i0 = i1