Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Quicksort

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Quicksort (1275 mal gelesen)
buecherm83
Mitglied
Ingenieur IT Application Software


Sehen Sie sich das Profil von buecherm83 an!   Senden Sie eine Private Message an buecherm83  Schreiben Sie einen Gästebucheintrag für buecherm83

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von cartoonhero an!   Senden Sie eine Private Message an cartoonhero  Schreiben Sie einen Gästebucheintrag für cartoonhero

Beiträge: 246
Registriert: 21.04.2004

erstellt am: 10. Apr. 2014 10:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für buecherm83 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Grebe an!   Senden Sie eine Private Message an Grebe  Schreiben Sie einen Gästebucheintrag für Grebe

Beiträge: 536
Registriert: 16.12.2002

LT-2021, Civil3D-2021, BricsCAD V18
HP-DesignJet T1200

erstellt am: 10. Apr. 2014 10:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für buecherm83 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von buecherm83 an!   Senden Sie eine Private Message an buecherm83  Schreiben Sie einen Gästebucheintrag für buecherm83

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank!

Daran hat es gelegen. Jetzt funktioniert es.

Grüße

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

buecherm83
Mitglied
Ingenieur IT Application Software


Sehen Sie sich das Profil von buecherm83 an!   Senden Sie eine Private Message an buecherm83  Schreiben Sie einen Gästebucheintrag für buecherm83

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Bernd P an!   Senden Sie eine Private Message an Bernd P  Schreiben Sie einen Gästebucheintrag für Bernd P

Beiträge: 3358
Registriert: 07.06.2001

erstellt am: 14. Apr. 2014 08:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für buecherm83 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von buecherm83 an!   Senden Sie eine Private Message an buecherm83  Schreiben Sie einen Gästebucheintrag für buecherm83

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 14. Apr. 2014 11:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für buecherm83 10 Unities + Antwort hilfreich

dann hat es aber nicht wirklich was mit Excel zu tun, das ist dann eher in der Vb-Abteilung angesiedelt

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz