Type durchmixen?
Übersicht

![]() |
SmilyBetreff: Type durchmixen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich habe folgendes problem: Ich brauche eine möglichkeit, einen Type, welcher u.a. auch viele einträge haben kann, relativ schnell "durchzumixen". hier mein Ansatz, damit ihr wisst, was ich meine: Code: [AUSKLAPPEN] Type n
Field n End type Print "create type" For c = 1 To 10 n.n = New n n\n = c Next Print "mix" mix For n.n = Each n Print n\n next function mix() For d = 1 To 3 For n.n = Each n If Rand(0,3) Insert n Before First n Next Next End function Wenn der Type dann aber größer wird (so um die 600 Einträge) habe ich zwei Probleme: 1. Es dauert sehr langsam 2. Ich brauche mehr durchläufe, da sonst trotzdem nicht gut gemischt wird. Kennt jm. eine bessere Routine für diese Aufgabe? Es muss nicht unbedingt Realtime sein, aber länger als 2-3 sekunden darf die Routine auch nicht brauchen. edit: Mir ist gerade aufgefallen, dass das Programm nicht die Einträge der reihe nach durchgeht. Wieso macht er nicht bei dem Eintrag weiter, der als nächste kommt? oO |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab da gerade etwas zusammen gefummelt .....
Code: [AUSKLAPPEN] Type n Field n End Type
Print "create type" For c = 1 To 10;5000 n.n = New n n\n = c Next Print "mix" time =MilliSecs() mix Print MilliSecs ()-time +" Millisekunden" WaitKey For n.n = Each n Print n\n Next WaitKey Function mix() a1.n=First n anz =1 While a1<>Null a2.n = a1 a3.n = a1 a1 =After a1 Zaehler =Rand (0,anz) While Zaehler a3 =Before a3 Zaehler =Zaehler-1 Wend If a3 =Null Then a2=First n Else Insert a2 Before a3 EndIf Anz = anz +1 Wend End Function bei mir dauern 5000 Einträge mischen 280 Millisekunden. Hier ist die dicke Speedbremse Code: [AUSKLAPPEN] For n.n = Each n
If Rand(0,3) Insert n Before First n Next du setzt den Zähler n.n in dieser Schleife immer wieder an den Anfang, und deine Schleife wird schnell zu einer Endlosschleife! |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
juhu thx ![]() hast mir sehr geholfen. Gruß, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group