Sortier Algorythmus funktioniert nicht

Anfängerfragen zum Programmieren mit PureBasic.
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Sortier Algorythmus funktioniert nicht

Beitrag 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
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Sortier Algorythmus funktioniert nicht

Beitrag 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
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Sortier Algorythmus funktioniert nicht

Beitrag 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
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: Sortier Algorythmus funktioniert nicht

Beitrag 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
Bild
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Sortier Algorythmus funktioniert nicht

Beitrag von Sommertv »

Upps, sorry... klar gibts das...
war mit Gedanken schon wieder woanders
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

Re: Sortier Algorythmus funktioniert nicht

Beitrag 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()
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: Sortier Algorythmus funktioniert nicht

Beitrag 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:
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Sortier Algorythmus funktioniert nicht

Beitrag von mk-soft »

Jetzt kennt PB Then 8)

Code: Alles auswählen

Macro Then
  :
EndMacro

If #True Then a = 1 : EndIf
Debug a
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Sortier Algorythmus funktioniert nicht

Beitrag 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...
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Antworten