Sortieren von Types von ???
[code:1:5040fd5df9]
SeedRnd(MilliSecs())

Type tabelle
Field name$
End Type

Local create.tabelle


For i=0 To 10

create = New tabelle
create
ame$ = Chr$(Rand(65,90)) + Chr$(Rand(65,90)) + Chr$(Rand(65,90))

Next




DebugLog "----------UNSORTIERT"
SUB_out()

SUB_sort() ; HIER WIRD SORTIERT

DebugLog "----------SORTIERT"
SUB_out()

WaitKey()





Function SUB_sort()

Local sort.tabelle
Local help.tabelle
Local litle.tabelle
Local search.tabelle


; Voreinstellungen

; erster Wert ist der kleinste
litle = First tabelle
; wird an das ende von der tabelle verschoben
Insert litle After Last tabelle

; sort wird an anfangsposition gesetzt
sort = First tabelle


; Hauptschleife für SORT

Repeat

; sort in help kopieren, da sonst sort beim
; verschieben von help ins leere zeigt
help = sort

; sort schon mal vorsorglich auf die nächste
; position verschieben
sort = After sort

; zeigt sort ins leere oder ist an das ende gekommen?
If sort = Null Then Return

; Kontroll-Ausgabe
;SUB_out()

;---

; vergleichen der beiden inhalte
If help
ame$ <= litle
ame$ Then

; Konroll-Ausgabe
;DebugLog "help <= litle "+ help
ame$ +" <= "+ litle
ame$

; wen ja, so kommt help vor litle
Insert help Before litle
; und wird als neuster kleinster wert deffiniert
litle = help

Else

; Konroll-Ausgabe
;DebugLog "help > litle "+ help
ame$ +" > "+ litle
ame$

; die suche beginnt, litle ist der startpunkt
search = litle

Repeat

; search wird eine position vor geschoben
search = After search

; ist search schon an das ende gekommen?
If search = Null Then
; wen ja, so kommt help an das ende der tabelle
; da help ja der zur zeit den grösste wert enthält
Insert help After Last tabelle
; die suche kann beendet werden
Exit
EndIf

; ist der help kleiner als search?
If help
ame$ <= search
ame$ Then
; wen ja, so wird help vor search eingefügt
Insert help Before search
; due suche kann beendet werden
Exit
EndIf

Forever

EndIf

; wen sort und litle gleich sind, so wurden alle
; werte miteinander verglichen und die sortierung
; kann beendet werden
If sort = litle Then Return

Forever

End Function

;-----------------

Function SUB_out()

Local test.tabelle

For test = Each tabelle

DebugLog test
ame$

Next

DebugLog ""

End Function
[/code:1:5040fd5df9]
===
von ???
Das soll eine Function sein, die ein paar Types in der Reihenfolge nach sortiert, richtig? Das kann ich dir nachher mal etwas vereinfacht und kürzer geben...
Bin nur vorerst weg, vllt heute Abend ;)
===
von ???
Dies ist eine Möglichkeit von vielen Sortier-Algorithemen... Aber auf deine Lösung bin ich schon gespannt... bis heute Abend...
===
von ???
Sorry, das es eine Woche gedauert hat, aber ich habe den Thret total vergessen...
Naja, hier meine Funktion:
[code:1:545d6caa0d]function sortieren()
for t.typ=each typ
if t
ame$<wert$ then insert t before first typ
wert$=t
ame$
next
end function[/code:1:545d6caa0d]
Ich hoffe mal nicht, dass du jetzt traurig bist, dass dein langer Skript im Grunde sinnlos geworden ist :wink:.
Wer noch Fehler findet, soll sich bitte melden. Ich wollte damals eine Sortierroutine schreiben und habe festgestellt, dass die Funktion mit den 4 Zeilen schon einwandfrei funktioniert. Bisher habe ich noch keine Fehler gefunden, und eigendlich schon recht häufig eingesetzt.

Bedient euch :D
===
von ???
ehm explosive, ich glaube eher dein source wird wohl kaum gehen
===
von ???
@explosive, ich glaube nicht das dein Code funzt, bzw habe ich es auch getestet...

irgendwie komme ich in einer Endlosschleife...
[code:1:15ed510261]
Type typ
Field name$
End Type

For i=0 To 100
x.typ = New typ
x
ame$ = Chr$(Rand(65,90)) + Chr$(Rand(65,90)) + Chr$(Rand(65,90))
DebugLog x
ame$
Next

DebugLog ""
DebugLog " sort"

sortieren()

For j.typ = Each typ
DebugLog "> "+ j
ame$
Next

WaitKey()


Function sortieren()
For t.typ=Each typ
If t
ame$ < wert$ Then Insert t Before First typ
wert$=t
ame$
DebugLog "_ "+ t
ame$
Next
End Function
[/code:1:15ed510261]
===
von ???
hm? was machst du denn da? du erstellst eine variable x.typ, sortierst eine variable t.typ und gibst eine variable j.typ aus. :shock: kann doch irgendwie nicht gehen, oder?
===
von ???
aha, und ich dachte es gäbe keine zeiger bei blitz :) wieder was gelernt!
===
von ???
Eigentlich sollte explosives Code funktionieren (auch wenn man es kaum glauben mag) mit O(n^2). Nicht der schnellste Sortieralgorithmus aber auch kein schlechter. Endlosschleife? :shock:
===
von ???
[quote:e7596b74ad="Valio"]Endlosschleife? :shock:[/quote:e7596b74ad]

Habe ja den Code/Sortiertalgoritmus getestet, der bleibt einfach hängen bei einem Wert von 1000...

Hier nochmals eine genauere Analyse. Debuger eingschaltet und nach ein paar Sekunden den roten Knopf drücken. Der springt immer wieder an den Anfang, und so wird das ganze bis zu X mal gescheckt.

Bei 10 zahlen, ca. 300-600 mal
Bei 12 zahlen, ca. bis 3500 mal

Also eine fast logaritmische Zunahme...

[code:1:e7596b74ad]
SeedRnd(MilliSecs())

Type typ
Field name$
End Type

For i=0 To 9
x.typ = New typ
x
ame$ = Chr$(Rand(65,90)) + Chr$(Rand(65,90)) + Chr$(Rand(65,90))
DebugLog x
ame$
Next

DebugLog ""
DebugLog " sort"

Global count

sortieren()

For j.typ = Each typ
DebugLog "> "+ j
ame$
Next

WaitKey()




Function sortieren()
For t.typ=Each typ

count = count + 1

If t
ame$ < wert$ Then
DebugLog ""

For test.typ = Each typ
If test = t Then test_zeiger$ = "<" : Else test_zeiger$ = ""
DebugLog test
ame$ + test_zeiger$
Next

Insert t Before First typ

DebugLog "count > "+ count

EndIf

wert$=t
ame$
Next
End Function

[/code:1:e7596b74ad]
===
von ???
valio, eine sehr gute seite zum thema:

http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/quick/quick.htm

und nicht wirklich schwer...nicht wenn unmittelbar vor seinem vordiplom steht ;).
===
@ hicks: von ???
Danke für den Link. Quicksort ist an sich auch nicht wirklich schwer, allerdings muss man bei linearen Pointerlisten (wie z.B. Types) einige zusätzliche Aspekte beachten, da diese ja keinen Index besitzen.



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: