Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.11.2020, 16:21

binäre suche

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
""" ************************************************
Binäre Suche
************************************************"""
# der Import der Funktion randrange() aus dem Modul random
from random import randrange

# die maximale Anzahl der Werte
anzahl = 100

# eine leere Liste für die Werte
werte = []

# wurde schon ein Wert gefunden?
gefunden = False

# für die Suche
suchen = 0
ende = anzahl - 1
anfang = 0

print("Binäre Suche")
# die Liste füllen, benutzt werden zufällige Zahlen bis 200
durchlauf = 1
while durchlauf <= anzahl:
    werte.append(randrange(1, 201))
    durchlauf = durchlauf + 1

# zur Kontrolle unsortiert ausgeben
print("Die unsortierten Werte sind: ")
for wert in werte:
    print(wert, end = " ")
print()

# jetzt sortieren und noch einmal zur Kontrolle ausgeben
werte.sort()
print("Die sortierten Werte sind: ")
for wert in werte:
    print(wert, end = " ")
print()

# Abfrage des Suchkriteriums
kriterium = int(input("Wonach soll gesucht werden? "))

# und jetzt suchen
# dabei wird immer wieder in links und rechts geteilt
while ende >= anfang and gefunden == False:
    # die Mitte berechnen
    mitte = (anfang + ende) // 2
    #ist die die Zahl kleiner als die Zahl in der Mitte, dann wird links weitergesucht
    if kriterium < werte[mitte]:
        ende = mitte - 1
    # sonst wird rechts weitergesucht bzw. wir haben die Zahl gefunden
    elif kriterium > werte[mitte]:
        anfang = mitte + 1
    else:
        gefunden = True

if gefunden == True:
    print("Der Wert", kriterium, "befindet sich an der Position", mitte + 1)
else:
    print("Der Wert", kriterium, "wurde nicht gefunden.")



Brauche Hilfe Leute. Ich will das alle Treffer einer Zahl angezeigt werden und nicht nur einer.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

28.11.2020, 16:47

Wenn die Zahl gefunden wurde, schau links und rechts von der Trefferposition nach weiteren Vorkommnissen der Zahl (so lange nach links und rechts weiterlaufen, bis eine andere Zahl kommt). Aufpassen, dass du nicht aus der Liste rausläufst.