AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bubblesort Problem

Ein Thema von GreyFox23 · begonnen am 4. Okt 2015 · letzter Beitrag vom 9. Mär 2018
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Bubblesort Problem

  Alt 6. Mär 2018, 21:04
greife das Thema mal auf da es bei mir auch um Bubblesort geht.

Delphi-Quellcode:
procedure BubbleSort(var zorder: array of Integer; var faceorder: array of Integer);
var
  IntI, IntK: Integer;
begin

  for IntI := Low(zorder) to (High(zorder) - 1) do
  begin
    for IntK := (IntI + 1) to High(zorder) do
    begin
       if zorder[IntI] < zorder[IntK] then
       begin
         BubbleSwap(zorder[IntI], zorder[IntK]);
         BubbleSwap(faceorder[IntI], faceorder[IntK]);
       end;
    end;
  end;
end;
BubbleSort(zorder, faceorder);

Mein Problem ist folgendes

Im Array zorder können sich auch negative werte befinden.
Wenn sie negativ sind würden sich diese werte ändern.

bsp.
zorder[IntI] := -18;
zorder[IntK] := -90;

in dem fall würde sich das Array ändern
weil -18 mehr wie -90 ist.

Das führt aber beim zeichnen zu Problemen da die ZOrder des Objects dann verändert wird.
Denn -90 ist ja eigentlich wenn ich zeichne mehr wie -18. (es liegt tiefer im Raum)

Wie kann ich das beheben? Oder ist meine Denkweise falsch.
Wenn also die Zorder wie im Bild -6 mehr wie -78 ist dann habe ich ein großes Problem.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:49 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#2

AW: Bubblesort Problem

  Alt 6. Mär 2018, 22:31
Bin mir nicht sicher, ob ich Dich richtig verstanden habe.

Gewünscht ist nicht: -90 -45 -30 -15 -7 0 7 15 30 45 90
sondern: -7 -15 -30 -45 -90 0 7 15 30 45 90

Oder mal ein Versuch es zu formulieren:

Zuerst mit dem vorhandenen BubbleSort sortieren.

Dann den ersten Wert suchen, der >= 0 ist.

Anschließend den Teil des Arrays, der vor diesem Wert liegt, absteigend sortieren.

Ungetestete Idee:
Delphi-Quellcode:
procedure BubbleSort(var zorder: array of Integer; var faceorder: array of Integer);
var
  IntI, IntK: Integer;
  IntM : Integer;
begin

  for IntI := Low(zorder) to (High(zorder) - 1) do
  begin
    for IntK := (IntI + 1) to High(zorder) do
    begin
       if zorder[IntI] < zorder[IntK] then
       begin
         BubbleSwap(zorder[IntI], zorder[IntK]);
         BubbleSwap(faceorder[IntI], faceorder[IntK]);
       end;
    end;
  end;

  for IntM := Low(zorder) to (High(zorder)) do
  begin
    if zorder[IntM] >= 0 then break;
  end;
  IntM := IntM - 1;
  
  for IntI := Low(zorder) to (IntM - 1) do
  begin
    for IntK := (IntI + 1) to IntM do
    begin
       if zorder[IntI] > zorder[IntK] then
       begin
         BubbleSwap(zorder[IntI], zorder[IntK]);
         BubbleSwap(faceorder[IntI], faceorder[IntK]);
       end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Bubblesort Problem

  Alt 6. Mär 2018, 22:37
if zorder[IntI] < zorder[IntK] then {swap}

bsp.
zorder[IntI] := -18;
zorder[IntK] := -90;

in dem fall würde sich das Array ändern
weil -18 mehr wie -90 ist
Aber das Array würde sich doch nur ändern, wenn I (= - 18) kleiner als K (= -90) wäre, was ja nicht der Fall ist. Oder verstehe ich das Problem falsch?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#4

AW: Bubblesort Problem

  Alt 6. Mär 2018, 22:43
... wenn I (= - 18) kleiner als K (= -90) wäre ...
Vermute, dass es genau so sein soll.

Das liefe auf eine absteigende Sortierung für die Werte < 0 und eine aufsteigende Sortierung für die Werte > 0 hinaus, wobei die 0 zwischen diesen beiden Teilbereichen zu liegen kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Bubblesort Problem

  Alt 6. Mär 2018, 22:51
... wenn I (= - 18) kleiner als K (= -90) wäre ...
Vermute, dass es genau so sein soll.
Mhh, weiß jetzt nicht, um welche Z-Order es genau geht, aber meiner Erfahrung nach handelt es sich doch hier eigentlich immer um ganz normale 3-dimensionale Räume. Hier sollte auch die bekannte Ordnung der Elemente gelten, also (je nach Richtung) entweder kleinere Z-Werte = weiter hinten bzw. kleinere Z-Werte = weiter vorne. Dass es da einen Umbruch bei der Null gibt, wäre mir neu.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#6

AW: Bubblesort Problem

  Alt 6. Mär 2018, 22:54
Das mag durchaus so sein, ich hab' halt die Anforderung so verstanden, das es quasi von -1 nach -unendlich, 0, 1 nach unendlich gehen soll.

Aber wie oben schon geschrieben: Bin mir nicht sicher, ob ich die Anforderung richtig verstanden habe.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Bubblesort Problem

  Alt 6. Mär 2018, 23:58
... wenn I (= - 18) kleiner als K (= -90) wäre ...
Vermute, dass es genau so sein soll.
Mhh, weiß jetzt nicht, um welche Z-Order es genau geht, aber meiner Erfahrung nach handelt es sich doch hier eigentlich immer um ganz normale 3-dimensionale Räume. Hier sollte auch die bekannte Ordnung der Elemente gelten, also (je nach Richtung) entweder kleinere Z-Werte = weiter hinten bzw. kleinere Z-Werte = weiter vorne. Dass es da einen Umbruch bei der Null gibt, wäre mir neu.
-18 ist aber größer laut der Berechnung von Bubblesort.
Das ist mein Problem weis nicht wie ich das verrechnen soll.

Ich habe 10 Objekte die sich im Kreis drehen.
Wenn sich diese im Vordergrund befinden dann soll das nächstfolgende das davor liegende überlagern.
Wenn das letzte Objekt hinten liegt in dem fall das 10 dann soll das folgende dieses überlagern.
Ist etwas kompliziert zu beschreiben.

wie man am Bild erkennen kann ist das alles etwas durcheinander.

Das grüne ist das höchste Element wenn sich dieses vorne befindet dann sollen alle nachfolgenden dieses überlagern
Wenn es sich hinten befindet sollen sich die folgenden dahinter setzen.

@Delphi.Narium
Kann dir den Source gern mal schicken damit du nachverfolgen kannst um was es mir geht.
Oder jemanden anderen der es mal testen möchte.
Schick ne PN wenn du willst mit deiner MAIL..
Dein versuch funktioniert leider nicht.
Komme mit den minus werten nicht klar.

Im Bild das Blaue auf der linken Seite müsste vor dem grünen liegen
und das blaue vor dem orangen müsste das orange überlagern. usw.. LOL

gruss

Geändert von EWeiss (11. Jul 2019 um 15:49 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Bubblesort Problem

  Alt 7. Mär 2018, 04:45
Hallo,
ich würde das ganz pragmatisch angehen.
Schreibe Dir eine Compare-Methode.
Parameter sind 2 Integer-Werte, Ergebnis -1, 0, +1.

Dort definierst Du Deine Sortierkriterien:
Beide negativ oder beide positiv: vergleiche Abs-Werte
andernfalls: es reicht der direkte Vergleich

Das Rausziehen in eine eigene Compare-Methode macht es übersichtlicher.
Heiko
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Bubblesort Problem

  Alt 7. Mär 2018, 08:16
Zitat:
ich würde das ganz pragmatisch angehen.
Das hört sich bei euch alles so einfach an.
Ist es aber nicht..

Denn was ich versuche ist ein Object in einem emulierten 3D Raum zu bewegen.
Die Z Order (Tiefe) wie bei 3D gibt es aber bekanntlich in 2D nicht.

gruss
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#10

AW: Bubblesort Problem

  Alt 6. Mär 2018, 22:44
Wenn also die Zorder wie im Bild -6 mehr wie -78 ist dann habe ich ein großes Problem.
Dann sortiere doch einfach nach den Beträgen (Absolutwerten ohne Vorzeichen)!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz