Rekursiver Aufruf zum Sortieren von Points.

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von NegativeProgrammer.

    Rekursiver Aufruf zum Sortieren von Points.

    Geehrtes Forum,
    ich habe eine Klasse geschrieben, der das Sortieren von X,Y-Wertepaaren übernimmt, welches ohne Umweg nicht ordnungsgemäß verläuft.
    Gedacht hab ich mir, die X,Y Fragmente zu addieren, und sie nach ihrer Größe nach zu sortieren, was auch klappte...

    Beispiel:

    Quellcode

    1. {0,0}
    2. {2,2}
    3. {1,1}

    wird zu

    Quellcode

    1. {0,0}
    2. {1,1}
    3. {2,2}

    das Problem hierbei, wenn der X-Wert dem Restwert des Arrays kleiner war, so waren die Endergebnisse nicht mehr diesselben...
    Deswegen dachte ich mir, ich speichere die Ursprungswerte in ein anderes Array, und vergleiche durch Rekursion ob sie mit dem Sortierten die selbe Summe ergeben...
    So,

    VB.NET-Quellcode

    1. Imports System.Math
    2. Imports System.Drawing
    3. Public Class SortPoints
    4. Public Sub New(ArrayOfPointFObj As PointF())
    5. ArrayOfPointF = ArrayOfPointFObj
    6. End Sub
    7. Private ArrayOfPointF(3) As PointF
    8. Private CurrentPointF(3) As PointF
    9. Private ListOfSingles As New List(Of Single)
    10. Private SortedSingles(3) As Single
    11. Private Counter As Integer = -1
    12. Public Function SortPoints() As PointF()
    13. For i = 0 To ArrayOfPointF.Length - 1
    14. ListOfSingles.Add(ArrayOfPointF(i).X + ArrayOfPointF(i).Y)
    15. CurrentPointF(i) = ArrayOfPointF(i)
    16. Next
    17. ListOfSingles.Sort()
    18. ListOfSingles.CopyTo(SortedSingles)
    19. Return DoAction()
    20. End Function
    21. Private Function DoAction() As PointF()
    22. Counter += 1
    23. For j = 0 To ArrayOfPointF.Length - 1
    24. If SortedSingles(Counter) = CurrentPointF(j).X + CurrentPointF(j).Y Then
    25. ArrayOfPointF(Counter) = CurrentPointF(j)
    26. ElseIf Counter >= ArrayOfPointF.Length - 1 Then
    27. Else
    28. DoAction()
    29. End If
    30. Next
    31. Return ArrayOfPointF
    32. End Function
    33. End Class

    Doch es sortiert nicht ) ; ...

    Hoffe auf Antworten.
    Grüsse...