| | | 3D-Druck: 7 Gründe für den Einsatz in der Medizin, ein Fachartikel
|
Autor
|
Thema: Quicksort (1342 mal gelesen)
|
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R24 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2010
|
erstellt am: 10. Apr. 2014 10:38 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hoffe ihr könnt mir helfen. Ich lass mir aus CATIA heraus x-Koordinaten auslesen. Diese möchte ich in Excel weiterverarbeiten. Da die Koordinaten vom CATIA User beliebig gewählt werden können, möchte ich diese in Excel zuerst aufsteigend sortieren. Ich habe dazu folgenden Code:
Code:
Option Explicit Public Sub Teste_QuickSort_Feld() Dim vX As Variant vX = Array("3", "7", "1", "-6", "-2", "0", "10") QuickSort_Feld vX, 0, UBound(vX), False Range("b2:h2") = vX vX = Array("3", "7", "1", "-6", "-2", "0", "10") QuickSort_Feld vX, 0, UBound(vX), True Range("b3:h3") = vX End Sub Private Sub QuickSort_Feld(DasFeld, StartUnten, EndeOben, _ Absteigend As Boolean) 'QuickSort Standard Dim iUnten As Long, iOben, iMitte, y iUnten = StartUnten iOben = EndeOben iMitte = DasFeld((StartUnten + EndeOben) / 2) While (iUnten <= iOben) If Not Absteigend Then While (DasFeld(iUnten) < iMitte And iUnten < EndeOben) iUnten = iUnten + 1 Wend While (iMitte < DasFeld(iOben) And iOben > StartUnten) iOben = iOben - 1 Wend Else While (DasFeld(iUnten) > iMitte And iUnten < EndeOben) iUnten = iUnten + 1 Wend While (iMitte > DasFeld(iOben) And iOben > StartUnten) iOben = iOben - 1 Wend End If If (iUnten <= iOben) Then y = DasFeld(iUnten) DasFeld(iUnten) = DasFeld(iOben) DasFeld(iOben) = y iUnten = iUnten + 1 iOben = iOben - 1 End If Wend If (StartUnten < iOben) Then Call _ QuickSort_Feld(DasFeld, StartUnten, iOben, Absteigend) If (iUnten < EndeOben) Then Call _ QuickSort_Feld(DasFeld, iUnten, EndeOben, Absteigend) End Sub
Das Ergebnis sieht allerdings folgendermaßen aus: -2, -6, 0, 1, 10, 3, 7 bzw. 7, 3, 10, 1, 0, -6, -2, Ich hätte aber gerne folgendes: -6, -2, 0, 1, 3, 7, 10 Was muss ich ändern damit die Zahlen richtig sortiert werden? Ich möchte Ohne Excel Sortierung auskommen, es soll also nur innerhalb des Codes sortiert werden und dann nach Excel geschrieben werden. Kann mir jemand wieterhelfen? Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cartoonhero Mitglied
Beiträge: 246 Registriert: 21.04.2004
|
erstellt am: 10. Apr. 2014 10:59 <-- editieren / zitieren --> Unities abgeben: Nur für buecherm83
Hallo, also ich würde mal sagen, es liegt an den Anführungszeichen wie z.B. hier: vX = Array("3", "7", "1", "-6", "-2", "0", "10") sollte so aussehen: vX = Array(3, 7, 1, -6, -2, 0, 10) ... die Anführungszeichen definieren das was zwischen ihnen steht als Text und hier soll ja nach den Werten sortiert werden. Gruss cartoonhero Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Grebe Mitglied
Beiträge: 536 Registriert: 16.12.2002 LT-2021, Civil3D-2021, BricsCAD V18 HP-DesignJet T1200
|
erstellt am: 10. Apr. 2014 10:59 <-- editieren / zitieren --> Unities abgeben: Nur für buecherm83
Was spricht denn gegen die in Excel integrierte Sortierfunktion? Range("A1:A6").Sort Key1:=Range("A1"), Order1:=xlAscending,Header:=xlGuess,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Bereich wäre entsprechend anzupassen... Mathias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R24 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2010
|
erstellt am: 10. Apr. 2014 11:56 <-- editieren / zitieren --> Unities abgeben:
|
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R24 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2010
|
erstellt am: 14. Apr. 2014 08:37 <-- editieren / zitieren --> Unities abgeben:
Guten morgen, ich habe über das Wochenende versucht den Code um die y-Koordinate zu erweitern. Diese soll jedoch nicht sortiert werden, sondern mit ihrem entsprechenden x-Werte sortiert werden. Bei zwei gleichen x-Werten, soll jedoch der niedrigere y-Werte berücksichtigt werden. Dazu habe ich den Code erweitert. Mein Ansatz folgender Maßen: Code: Private Sub SortArray(ByRef DatenFeld() As Long, iTemp As Long, StartUnten As Long, StartOben As Long) Dim iMitte As Long Dim iUnten As Long Dim iOben As Long Dim y As Long iMitte = DatenFeld((StartUnten + StartOben) / 2, iTemp) iUnten = StartUnten iOben = StartOben Do While (iUnten <= iOben) Do While (DatenFeld(iUnten, iTemp) < iMitte And iUnten < StartOben) iUnten = iUnten + 1 Loop Do While (iMitte < DatenFeld(iOben, iTemp) And iOben > StartUnten) iOben = iOben - 1 Loop If (iUnten <= iOben) Then y = DatenFeld(iUnten, iTemp) DatenFeld(iUnten, iTemp) = DatenFeld(iOben, iTemp) DatenFeld(iOben, iTemp) = y iUnten = iUnten + 1 iOben = iOben - 1 End If Loop If (StartUnten < iOben) Then Call SortArray(DatenFeld, iTemp, StartUnten, iOben) End If If (iUnten < StartOben) Then Call SortArray(DatenFeld, iTemp, iUnten, StartOben) End If End Sub
Jedoch sortiet wird die y-spalte nicht richtigt berücksichtigt. Vielleicht kann mir ja jemand weiterhelfen! Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3424 Registriert: 07.06.2001
|
erstellt am: 14. Apr. 2014 08:42 <-- editieren / zitieren --> Unities abgeben: Nur für buecherm83
Zitat: Original erstellt von Grebe: Was spricht denn gegen die in Excel integrierte Sortierfunktion? Range("A1:A6").Sort Key1:=Range("A1"), Order1:=xlAscending,Header:=xlGuess,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Bereich wäre entsprechend anzupassen... Mathias
Servus, warum hier mit zwang etwas selber basteln was schon funktioniert? ------------------ <----- Bitte Systeminfo eintragen, warum siehst du hier. "Warum Einfach es geht auch kompliziert". Schöne Grüsse aus der Steiermark Bernd P. Sport ist Mord Rekorde: Scalelist>11727, Fehler>34365, Layerfilter>XXXX Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R24 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2010
|
erstellt am: 14. Apr. 2014 09:11 <-- editieren / zitieren --> Unities abgeben:
weil es noch nicht sicher ist, ob die Daten von CATIA an Excel weiter gegeben werden sollen oder nicht. Deshalb das selber bauen. Und in Excel kann lässt sich zum testen die Ein- und Ausgaben besser darstellen. Der Code später ist dann ja unabhängig. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 14. Apr. 2014 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für buecherm83
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|