Frage von KidBoo, 41

Visual Basic - Sortieren und Doppelte löschen?

Hey, hab eine Aufgabe bekommen, wo man beliebig viele Zahlen einlesen soll über die Konsole und die dann in sortierter Reihenfolge (aufsteigend) wieder ausgeben soll(als Bubblesort). Allerdings sollen auch die Zahlen nicht doppelt vorkommen.

Da ich nur ein Semester das Fach habe, haben wir viele Sachen nur in einer Ausführung gezeigt bekommen. Ich bin mir bewusst das es nicht die beste Lösung ist (z.B Bubblesort), aber so hab ich es numal gezeigt bekommen.

So nun zur Lösung: den Bubblesort hab ich soweit mit zwei For-Schleifen hinbekommen auch die Ausgabe funktioniert, nun das Problem wie geht das mit den doppelten Werten löschen???Kann man das iwi in den Bubblesort mit einbringen???

Hier mein Bubblesort:

Sub Sortiere(ByVal bSteigend As Boolean, _ ByVal iAnzahl As Integer, _ ByRef dZahl() As Double)

    For i As Integer = 0 To iAnzahl - 2
        For j As Integer = i + 1 To iAnzahl - 1
            If bSteigend And dZahl(i) > dZahl(j) Then
                Austausche(dZahl(i), dZahl(j))
            ElseIf Not bSteigend And dZahl(i) < dZahl(j) Then
                Austausche(dZahl(i), dZahl(j))
            End If
        Next
    Next
End Sub

Sub Austausche(ByRef dZahl1 As Double, _
                ByRef dZahl2 As Double)
    Dim dZwischenspeicher As Double = dZahl1
        dZahl1 = dZahl2
        dZahl2 = dZwischenspeicher
End Sub
Antwort
von PWolff, 14

Dubletten löschen geht mit Bubble Sort, wenn du die Liste von oben nach unten durchgehst (also anders herum als üblich).

Löschen eines Eintrags wie üblich durch Überschreiben ab dort bis zum vorletzten Wert durch den jeweils folgenden und Erniedrigen der Anzahl.

Kommentar von PWolff ,

Vermutlich sollt ihr beide Verfahren selbst implementieren, sonst wäre es einfacher und vermutlich schneller, die mitgelieferten Methoden Array.Sort bzw. System.Linq.Enumerable.Order und System.Linq.Distinct zu verwenden.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten