Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Quicksort Algo für Strings optimieren (https://www.delphipraxis.net/110155-quicksort-algo-fuer-strings-optimieren.html)

Union 13. Mär 2008 21:59

Re: Quicksort Algo für Strings optimieren
 
Zitat:

Zitat von Hawkeye219
Hallo,

Zitat:

Zitat von alzaimar
Ich wäre jede Wette eingegangen, das der Compiler das 'DIV 2' selber in 'SHR 1' optimiert.

Dann hätte man das aber als Fehler melden müssen, denn SHR erwartet schließlich einen vorzeichenlosen Operanden.
Gruß Hawkeye

Das ist dem Shr vollkommen piepegal, der schiebt einfach. Und selbst wenn, bei einem statischen Array kann man ja theoretisch sowas machen:
Delphi-Quellcode:
TArrayFromHell = array[-666.. 666] of string;
Hier gehts aber um ein dynamisches Array was zu sortieren ist, und die fangen doch in Delphi bei 0 an?

kcx 13. Mär 2008 22:15

Re: Quicksort Algo für Strings optimieren
 
Danke an alle für die Hilfe!

Jetzt schafft es 1.000.000 Strings meist unter einer Sekunde.
:thumb:

Union 13. Mär 2008 22:20

Re: Quicksort Algo für Strings optimieren
 
Zitat:

Zitat von kcx
Jetzt schafft es 1.000.000 Strings meist unter einer Sekunde. :thumb:

D.h. fast doppelt so schnell, sauber. Ich habe zwar einen Funktionstest gemacht aber nicht geprüft ob der Code jetzt auch wirklich richtig sortiert...

Hawkeye219 13. Mär 2008 22:41

Re: Quicksort Algo für Strings optimieren
 
Hallo Union,

Zitat:

Zitat von Union
Das ist dem Shr vollkommen piepegal, der schiebt einfach.

...und schiebt vorne immer ein 0-Bit nach. Der Compiler darf bei der Division einer vorzeichenbehafteten Zahl (Start und Stop haben im Beispiel den Typ "Integer") durch eine Zweierpotenz das DIV nicht durch SHR ersetzen, weil auch negative Werte vorkommen können. Diese Werte wären nach der Schiebeoperation aber plötzlich positiv, weil das Vorzeichenbit durch SHR nicht dupliziert wird, wie dies bei SAR der Fall ist. Ein Compiler kann nicht wissen, dass dieser Fall zur Laufzeit nicht eintreten wird. Der Programmierer könnte das abschätzen und den geeigneten Datentyp "Cardinal" wählen. In diesem Fall führt der Delphi-Compiler auch die Optimierung durch - jedenfalls dann, wenn links und rechts vom Zuweisungsoperator unterschiedliche Variablen stehen.

Gruß Hawkeye

Union 13. Mär 2008 22:49

Re: Quicksort Algo für Strings optimieren
 
Zitat:

Der Compiler darf bei der Division einer vorzeichenbehafteten Zahl (Start und Stop haben im Beispiel den Typ "Integer") durch eine Zweierpotenz das DIV nicht durch SHR ersetzen
Das ist ja auch klar, war ja nur eine Vermutung von alzaimar die eben so nicht zutraf. Und Du hast Recht, Cardinal wäre sowieso besser in dem Fall, falls man mal ein Array hat das mehr Elemente als $EFFF FFFF hat. Wer weiss was dann mit den Typecasts passiert und der Addressierung. Aber bei 4 Milliarden strings verwendet man auch keinen Quicksort mehr ;) Da könnte man ja die Namen der halben Weltbevölkerung sortieren :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz