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!
...
:shock:

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. :evil:
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. :lol:

Re: Sortier Algorythmus funktioniert nicht

Verfasst: 26.05.2019 16:26
von mk-soft
Jetzt kennt PB Then 8)

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...