Seite 1 von 1
Sortier Algorythmus funktioniert nicht
Verfasst: 26.05.2019 09:01
von Sommertv
Guten Morgen,
möcht gerade meine Shell-Sortierroutine umschreiben, aber tut net was ich will.
Für Bubblesort hätt ich mehrere Beispiele gefunden aber das iss zu langsam. Die hier wäre mindestens 10x so schnell, wenn's funktionieren tät.
Gleich in der 1. Zeile kommt Fehler not a function, array, list, map or macro. Das hab ich ja auch net definiert.
Code: Alles auswählen
last = data(n(),1)
hops = int(last / 10) + 1
while(TRUE)
first = hops + 1
for count1 = first to last
buffer1 = n(count1)
count2 = count1 - hops
while(TRUE)
buffer2 = n(count2)
if buffer1 >= buffer2 then
count2 = count2 + hops
break
end if
n(count2+hops) = buffer2
if count2 <= hops then
break
end if
count2 = count2 - hops
wend
n(count2) = buffer1
next count1
if hops = 1 then
return
else
hops = int(hops / 3.5) + 1
end if
wend
Re: Sortier Algorythmus funktioniert nicht
Verfasst: 26.05.2019 09:09
von Bisonte
Ich hab grad keinen blassen Schimmer, was du da sortieren willst... Allerdings kann ich
dich auf die schon
eingebauten Sortierfunktionen von PureBasic verweisen.
- SortArray - Sortiert ein einfaches Array
SortList - Sortiert eine einfache Liste
SortStructuredArray - Sortiert ein Array mit Struktur
SortStructuredList - Sortiert eine Liste mit Struktur
Re: Sortier Algorythmus funktioniert nicht
Verfasst: 26.05.2019 09:32
von Sommertv
Ich hab den Fehler gefunden...
"Data" ist ein reserviertes Wort und "while/wend" muss ich umbauen weil's "wend" in Purebasic net gibt.
Danke aber auch für den Tip!
Hab es gerade mit den internen Methoden probiert, iss aber bei knapp 100000 Einträgen viel zu langsam.
Da iss der Rechner fast 2 Minuten blockiert, mit obiger Methode dauert's nur 8 Sekunden...
Schöne Grüsse
Kurt
Re: Sortier Algorythmus funktioniert nicht
Verfasst: 26.05.2019 11:13
von Lord
Sommertv hat geschrieben:Ich hab den Fehler gefunden...
"Data" ist ein reserviertes Wort und "while/wend" muss ich umbauen weil's "wend" in Purebasic net gibt.
Danke aber auch für den Tip!
...
Lieber hier nachsehen:
https://www.purebasic.com/documentation ... _wend.html
Re: Sortier Algorythmus funktioniert nicht
Verfasst: 26.05.2019 11:24
von Sommertv
Upps, sorry... klar gibts das...
war mit Gedanken schon wieder woanders
Re: Sortier Algorythmus funktioniert nicht
Verfasst: 26.05.2019 14:34
von matbal
Sommertv hat geschrieben:Hab es gerade mit den internen Methoden probiert, iss aber bei knapp 100000 Einträgen viel zu langsam.
Da iss der Rechner fast 2 Minuten blockiert, mit obiger Methode dauert's nur 8 Sekunden...
Klingt für mich, als machst du etwas falsch. Was sortierst du denn?
100000 Einträge zu sortieren, dauert bei mir im unteren 2 Stelligen Millisekundenbereich.
(Integer ca. 9 ms, Doubles ca. 12 ms, Strings ca. 45 ms)
Bei 1000000 (1 Mio.) Einträgen liegt es erst im unteren 3 stelligen Millisekundenbereich.
(Integer ca. 110 ms, Doubles ca. 130 ms, Strings ca. 600 ms)
Mein Test-Code
Code: Alles auswählen
OpenConsole()
#max = 100000
Dim IntFeld.i(#max) ; Integer
Dim dblFeld.d(#max) ; Doubles
Dim strFeld.s(#max) ; Strings
For i = 1 To #max
IntFeld(i) = Random(1000000)
dblFeld(i) = IntFeld(i) / 31552
strFeld(i) = Str(IntFeld(i))
Next i
t = ElapsedMilliseconds()
SortArray(IntFeld(), #PB_Sort_Ascending)
PrintN("Integer Sortiert in " + Str(ElapsedMilliseconds() - t) + " ms")
t = ElapsedMilliseconds()
SortArray(dblFeld(), #PB_Sort_Ascending)
PrintN("Double Sortiert in " + Str(ElapsedMilliseconds() - t) + " ms")
t = ElapsedMilliseconds()
SortArray(strFeld(), #PB_Sort_Ascending)
PrintN("String Sortiert in " + Str(ElapsedMilliseconds() - t) + " ms")
Input()
Re: Sortier Algorythmus funktioniert nicht
Verfasst: 26.05.2019 14:57
von Lord
Sommertv hat geschrieben:...
Hab es gerade mit den internen Methoden probiert, iss aber bei knapp 100000 Einträgen viel zu langsam.
Da iss der Rechner fast 2 Minuten blockiert, mit obiger Methode dauert's nur 8 Sekunden...
...
Du willst uns wohl veräppeln.
Mit der "obigen Methode" läuft es überhaupt nicht.
Im Gegensatz zu "Wend" kennt PB das "Then" nämlich nicht.
Der Code kann bei Dir nie funktioniert haben. Und die Fehlermeldung
läßt bestimmt keine 8 Sekunden auf sich warten.

Re: Sortier Algorythmus funktioniert nicht
Verfasst: 26.05.2019 16:26
von mk-soft
Jetzt kennt PB Then
Code: Alles auswählen
Macro Then
:
EndMacro
If #True Then a = 1 : EndIf
Debug a
Re: Sortier Algorythmus funktioniert nicht
Verfasst: 26.05.2019 17:42
von Sommertv
Da hast du schon Recht...
das Schlüsselwort Then gibts bei Purebasic nicht, ebenso Begin Bend... das iss was ich meinte.
Obiger Code stammt von einem anderen Dialekt, muss zuerst umgeschrieben werden.
Der Unterschied zwischen den beiden Basic Dialekten iss teilweise schon heftig.
Danke an alle für die Unterstützung...