suche UNSORT Algo

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

4pac

Betreff: suche UNSORT Algo

BeitragMi, Mai 12, 2004 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi liebe Coderz,

ich brauche gerade im Job einen Algorithmus, der quasi genau das Gegenteil macht von einem Sort, nämlich einen Array gründlich durcheinandermischen. Wäre auch interessant, das für einen Type zu haben, der quasi das hier

Code: [AUSKLAPPEN]
While Not Eof(filein)

   in$=ReadLine$(filein)
   If in$<>""
      s.sort=New sort
      s\single_word$=Lower$(in$)
   EndIf
   
Wend


umgekehrt macht. Naja, genau umgekehrt ist es ja nicht, er soll halt nur das Gegenteil einer Sortierung zur Wirkung haben - ausgegangen davon, daß (filein) eine sortierte Liste beinhaltet, die durcheinandergemischt werden soll. Kann mir jemand was Gescheihtes dazu posten?

Danke & Grüße,
Thomas

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragMi, Mai 12, 2004 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Etwas vermischen also?
Nunja.. ich würde ganz einfach jedem Type Eintrag / Array über Rand eine Zufallszahl zuteilen und dann nach dieser Zahl sortieren. Wink
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com |
www.CarnageContest.com | www.Stranded3.com

BladeRunner

Moderator

BeitragMi, Mai 12, 2004 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Global ArrayGroesse = xx       ;wieviele Elemente hat das Array
Dim deinArray(ArrayGroesse)    ;dein Array welches zu Unsortieren ist
Dim HilfsArray (ArrayGroesse+1)  ; ein Hilfsarray, kann nach benutzung mit dim(0) verkleinert werden
SeedRnd (MilliSecs())





;Unsort- da Arraynamen nicht als Funktionsparameter übergeben werden können
; muss in DeinArray das zu sortierende Feld sein. Ergebnis ebenfalls in DeinArray
For zaehler = 0 To ArrayGroesse
   If hilfsarray(zaehler)=0 Then
   
      .starter
      neuePosition= Rand(0,ArrayGroesse)
         If HilfsArray(neuePosition) = 0 Then
            HilfsArray(zaehler)=1
            HilfsArray(neueposition)=1
            Hilfsarray(ArrayGroesse+1)=DeinArray(Zaehler)
            Deinarray(Zaehler)=DeinArray(neuePosition)
            DeinArray(neuePosition)=hilfsArray(ArrayGroesse+1)
         Else
            Goto starter
      End If
   End If
Next

Achtung: kann Grade bei grösseren Arrays seeeeehr langsam werden, da neue Werte per Zufall bestimmt werden...

Und: nur aus dem kopf geschrieben, hab noch keinen richtigen Funktionstest gemacht...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

4pac

BeitragMi, Mai 12, 2004 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@ BladeRunner - Das sieht schön kurz aus und zumindest auf den ersten Blick logisch. Ich danke Dir. Ich werde das mal austesten. Um genau so eine kurze griffige Lösung ging es mir, ich gehe davon aus das sowas schon in optimierter Form existiert (ähnlich wie die gängigsten Sort-Algorithmen), und wollte deshalb vermeiden, die Lösung in 50 bis 100 Zeilen selbst zusammenzudilletieren.

Viele Grüße,
Thomas

TheShadow

Moderator

BeitragMi, Mai 12, 2004 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hm types sind nicht so gut zum sortieren oder mischen... Dim ist da besser und bequemer
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Blatolo

BeitragMi, Mai 12, 2004 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Const array_groesse=50            ;arraygröße festlegen
Dim array(array_groesse)         ;array dimensionieren

For i=0 To array_groesse         ;jedes array element durchgehen
   hilfsint=array(i)            ;wert zwischenspeichern
   zufallszahl=Rand(array_groesse)   ;element mit dem getauscht werden soll per zufall bestimmen
   array(i)=array(zufallszahl)      ;array element auf den wert des zufälligen elementes setzen
   array(zufallszahl)=hilfsint      ;zufälliges element mit gespeicherten wert gleich setzen
Next


Die Kommentare sollten alles erklären.
Im Grunde werden einfach immer 2 Werte vertauscht was im endeffekt zu einem chaos führt.

wunderkind

BeitragMi, Mai 12, 2004 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Unter folgendem Link findest du viele Algorithmen. Einfach mal Strg+F und "mischen" nutzen und schlaulesen Wink

http://www.imn.htwk-leipzig.de...nhalt.html

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Mai 15, 2004 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
hier eine Function zum Mischen von Types
benötigt keine zusätzliche Variable im TypefeldCode: [AUSKLAPPEN]
Function UN_sort_Type()
For Namen.Namen  = Each Namen: gs = gs+1:Next 
bs = 1
Repeat
   Namen.Namen = Last Namen
   Insert Namen Before First Namen
   X = 1
   bs = bs + 1
   XX = Rand (0,bs)
   For z =0 To XX
      If bs = x Then Exit
         Namen.Namen = After (Namen)
         X = X + 1
         Insert Namen Before Before Namen
        Namen.Namen = After (Namen) 
   Next
Until gs = bs
End Function
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group