Huhu,
ich sitz gerade an ner Uni-Aufgabe und weiß zum ersten mal nicht, was ich zutun hab :|.
Allerdings komme ich auf die Elementarschrittfrage nicht klar..
Vergleiche gibt es ja maximal soviele, wie viele Zahlen verglichen werden..
also zB bei
1,8,3,4
gibt es 4 durchläufe, bis sicher das größte vorne ist..innerhalb dieser durchläufe gibt es maximal 3 Vertauschungen..4x3 = 12..
etc..aber ich weiß nicht was mit dem Rest sein soll..außerdem ist dies ja die maximale Anzahl an Vertauschungen..und variable, je nach eingabe.
Wäre Klasse, wenn jemand Rat weiß.
ich sitz gerade an ner Uni-Aufgabe und weiß zum ersten mal nicht, was ich zutun hab :|.
ich hab mich zur Lösung für nen BubbleSort entschieden, bei dem er dann einfach das 2. Glied ausgibt (bzw solang nach hinten rutscht bis n != n-1)Quote:
Wir betrachten das Problem SecondLargest:
Input: eine Folge a von n ganzen Zahlen
Output: das zweitgrote Element der Folge
(a) Entwickeln Sie einen Algorithmus in Python- oder Java-Code, der das Problem lost.
(b) Wieviele Elementarschritte (Vergleiche, Zuweisungen, arithmetische Operationen,
boolesche Operationen, . . . ) benotigt Ihr Algorithmus in Abhangigkeit von n?
Allerdings komme ich auf die Elementarschrittfrage nicht klar..
Vergleiche gibt es ja maximal soviele, wie viele Zahlen verglichen werden..
also zB bei
1,8,3,4
gibt es 4 durchläufe, bis sicher das größte vorne ist..innerhalb dieser durchläufe gibt es maximal 3 Vertauschungen..4x3 = 12..
etc..aber ich weiß nicht was mit dem Rest sein soll..außerdem ist dies ja die maximale Anzahl an Vertauschungen..und variable, je nach eingabe.
Wäre Klasse, wenn jemand Rat weiß.
Code:
# coding=latin-1
def bubblesort(glieder):
maxdurchlaeufe = len(glieder) #Bestimmung der maximalen Anzahl an Tauschvorgängen
n = len(glieder) - 1 #Da die 2.größte ausgegeben werden soll
while maxdurchlaeufe >= 1: #durchlaufcounter
for k in range(len(glieder) - 1): #beginn forschleife
if glieder[k] > glieder[k+1]: #falls Position k+1 kleiner als k tausche
temp = glieder[k] #zwischenspeichern von zahl k in temp
glieder[k] = glieder[k+1] #k+1 nach k
glieder[k+1] = temp #k in k+1 (Ende Tausch)
maxdurchlaeufe = maxdurchlaeufe - 1 #durchlaufcounter--
while glieder[n] == glieder[n-1]: #falls letzte beiden Zahlen gleich solang zurückgehen bis seq[n] != seq[n-1]
n -= 1
return glieder[n-1] #Ausgabe 2. größte Zahl